0

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

似乎唯一的方法是将List封装为另一个类中的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 怎么办?

4

1 回答 1

2

List 是一种高级类型,可能不适用于所有编程范例。相比之下,数组可能在所有编程范式中都可用。因此默认情况下,翻译将落入代理 wsdl 的数组中

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

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

以下问题包含有关 OOP 和 SOA 的更多详细信息

WCF 对象设计 - OOP 与 SOA

于 2013-03-26T18:13:35.990 回答