我们可以将通用列表(List <customobject>)作为参数发送到WCF OperationContract吗?</customobject>

时间:2013-03-26 16:00:24

标签: wcf parameter-passing datacontract generic-collections operationcontract

我们可以将通用列表(List)作为参数发送到WCF OperationContract吗?

似乎唯一的方法就是将List封装为另一个Class中的DataMember,并将该类指定为DataContract:

但这对我来说并不合适。还有其他办法吗?

EDIT1:
签名:

[OperationContract]  
List<int> OperationName(List<CustomObject> objects);  

这转换为客户端的CustomObject []。我正在从我的客户端传递CustomObject [],它工作正常,但我想知道为什么我不能通过

  List <CustomObject> 

这给了我一个编译错误,说明没有带有指定参数的函数的重载版本(类型不匹配错误)

编辑2:
相关问题:
 1)我应该能够从服务本身控制这一点。如果我将我的服务暴露给整个世界并且wsdl / Proxy是他们知道我的OperationContract签名的唯一方法怎么办?
  2)如果我想在同一服务合同中的不同操作合同中同时使用System.Array和System.Generic.List,该怎么办?

1 个答案:

答案 0 :(得分:2)

列表是一种高级类型,可能并非所有编程范例都可用。数组,在比较中可能在所有编程范例中都可用。因此,默认情况下,转换将落入代理wsdl的数组

现在在这种情况下,如果您确定您的客户端是.Net,您可以更改客户端以使用List。由于服务不知道客户端的编程语言是什么,因此客户端决定使用列表或数组的svcutil的当前设计是正确的。如果您在服务中使用此设置,则排除不具有List

概念的客户

回到第二个问题,只要您的操作合同名称不同,您就可以在同一服务中使用该数组和列表。另请注意,OOP概念在SOA中受到限制,这意味着您不能拥有多态方法。

以下问题提供了有关OOP和SOA的更多详细信息

WCF Object Design - OOP vs SOA