定义WCF数据协定时,应该使用哪种类型的集合/列表?
答案 0 :(得分:13)
注意:我正在从客户端的角度回答这个问题 - 即/collectionType:<type>
svcutil.exe
上的List<T>
开关(也可在IDE中使用)。
就个人而言,我倾向于保持简单并使用BindingList<T>
。如果要进行大量的数据绑定,Enumerable
可能是一个选项,但对于对象属性,它通常是过度的。阵列让生活变得非常艰难......避免它们;-p
请注意,在.NET 3.5中,由于Collection<T>
上的扩展方法,每个集合类型可用的功能都会模糊。
通常情况下,当您认为可能要将集合子类化为使用virtual
扩展点时,IList<T>
非常有用。对于WCF来说,这不是一个真正的选择。
如前所述,除非您使用程序集共享,否则使用{{1}}等不是一个选项,因为生成的类将无法创建集合。
答案 1 :(得分:1)
您无法在datacontract中使用接口类型,因为序列化程序无法使用接口类型属性。
您可以使用具体类型,例如MyClass []或List
答案 2 :(得分:0)
除了您不能使用接口类型这一事实之外,您使用哪种集合类型并不重要。您服务的客户永远不会看到它们。
请记住,Web服务根据WSDL或mex为客户端提供服务的描述。对于WSDL,客户端将接收描述要发送和接收的消息的XML Schema。在集合的情况下,客户端将只看到具有maxOccurs =“unbounded”的元素,而不是具有maxOccurs =“1”的元素。客户端可以将其解释为数组,列表或其他内容。无论您从服务中返回哪个集合,客户端都会看到maxOccurs =“unbounded”并按其喜欢解释它。
异常将返回某种字典,我不知道它是如何工作的。