我有一个服务堆栈服务,在同一名称空间中有以下请求和响应类
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成为方法的返回类型?
答案 0 :(得分:3)
ServiceStack的SOAP Support wiki中包含了使用SOAP时要注意的限制:
由于VS.NET的添加服务参考已针对消费.asmx进行了优化 或者WCF RPC方法调用它不能正确支持多次返回 值(例如,当您还需要ResponseStatus属性时) 将生成一个丑陋的代理API,并带有out参数。
如果你想确保生成漂亮的代理,你应该只有 1个第一级属性,包含您要返回的所有数据。