Service Reference为ServiceStack生成不正确的代理

时间:2012-08-15 18:08:02

标签: c# servicestack

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

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>

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

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

我的问题是: 为什么EntityTypes和NameTypes成为out参数vs addressTypes成为方法的返回类型?

1 个答案:

答案 0 :(得分:3)

ServiceStack的SOAP Support wiki中包含了使用SOAP时要注意的限制:

  

由于VS.NET的添加服务参考已针对消费.asmx进行了优化   或者WCF RPC方法调用它不能正确支持多次返回   值(例如,当您还需要ResponseStatus属性时)   将生成一个丑陋的代理API,并带有out参数。

     

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