2009-02-27 60 views

回答

13

注意:我从客户端的角度回答了这个问题 - 即/collectionType:<type>开关svcutil.exe(也可在IDE中使用)。

我个人倾向于保持简单并使用List<T>。如果你打算做大量的数据绑定,BindingList<T>可能是一个选项,但对于对象属性,它通常是矫枉过正的。数组使生活变得非常艰难...避免它们; -p

请注意,对于每个集合类型可用的功能模糊的.NET 3.5,由于Enumerable上的扩展方法。

通常,Collection<T>在您认为您可能想要继承该集合以使用virtual扩展点时非常有用。这不是WCF的选择。

如前所述,除非您使用程序集共享,否则使用IList<T>等不是一个选项,因为生成的类将无法创建集合。

1

您不能在datacontract中使用接口类型,因为序列化程序不能使用接口类型属性。

您可以使用混凝土类型,例如MyClass []或列表

+0

哪种类型最适合使用? – JacobE 2009-02-27 12:33:02

0

除了不能使用接口类型这一事实外,使用哪种集合类型并不重要。你的服务的客户永远不会看到他们。

请记住,Web服务根据WSDL或mex提供对客户端服务的描述。在WSDL的情况下,客户端将收到描述要发送和接收的消息的XML模式。在集合的情况下,客户端只会看到一个maxOccurs =“unbounded”的元素,而不是maxOccurs =“1”的元素。客户端可能会将其解释为数组,列表或其他内容。无论您从服务中返回哪个集合,客户端都会看到maxOccurs =“unbounded”并按照它的喜好进行解释。

这个例外会返回某种类型的字典,我不知道它是如何工作的。

相关问题