2

我有一个服务堆栈服务,在同一个命名空间中具有以下请求和响应类

public class GetContactMasterData
{

}

public class GetContactMasterDataResponse
{
    public IdDescription[] EntityTypes { get; set; }
    public IdDescription[] NameTypes { get; set; }
    public IdDescription[] AddressTypes { get; set; }
    public ResponseStatus MyResponseStatus { get; set; }
}

我使用soapUI成功测试了该服务。这是回应

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">    
   <s:Body>
      <GetContactMasterDataResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
         <AddressTypes>
            <IdDescription>
               <Description>Home</Description>
               <Id>1</Id>
            </IdDescription>
            ...
         </AddressTypes>
        <EntityTypes>
           <IdDescription>
              <Description>Corporation</Description>
              <Id>1</Id>
           </IdDescription>
           ... 
        </EntityTypes>
        <MyResponseStatus i:nil="true" />
        <NameTypes>
           <IdDescription>
              <Id>4</Id>
              <Description>Other</Description>
           </IdDescription>
           ...
        </NameTypes>
      </GetContactMasterDataResponse>
   </s:Body>
</s:Envelope>

当我创建控制台应用程序来测试此服务时,服务引用会生成一个代理对象。这就是智能感知如何引导您调用 GetContactMasterData 方法

GetContactMasterData(out IdDescription[], out ResponseStatus myResponseStatus, out IdDescription[] NameTypes):IdDescription[] addressTypes

我的问题是:为什么 EntityTypes 和 NameTypes 变成了参数,而 addressTypes 变成了方法的返回类型?

4

1 回答 1

3

ServiceStack 的SOAP 支持 wiki中包含使用 SOAP 需要注意的限制:

由于 VS.NET 的 Add Service Reference 已针对使用 .asmx 或 WCF RPC 方法调用进行了优化,因此它不能正确支持多个返回值(例如,当您还需要 ResponseStatus 属性时),它将生成一个丑陋的代理 API,完全没有参数。

如果你想确保生成一个漂亮的代理,你应该只有一个包含你想要返回的所有数据的一级属性。

于 2012-08-15T18:19:34.183 回答