c# – WCF OperationContract – 哪个通用集合类型应该公开?

c# – WCF OperationContract – 哪个通用集合类型应该公开?,第1张

概述我有一个WCF Web服务,它具有返回一个通用集合的方法.现在,我的问题是:应该将其公开为ICollection< T>,List< T>,IList< T>,IEnumerable< T>或者是其他东西? 我想这个List< T>是我的问题,因为我想避免CA1002 errors,但底层类型将是一个列表< T>. 我真的很有兴趣听取你的看法,最好用很好的解释为什么你认为你的想法. 提前致谢 请记 我有一个WCF Web服务,它具有返回一个通用集合的方法.现在,我的问题是:应该将其公开为ICollection< T>,List< T>,IList< T>,IEnumerable< T>或者是其他东西?

我想这个List< T>是我的问题,因为我想避免CA1002 errors,但底层类型将是一个列表< T>.

我真的很有兴趣听取你的看法,最好用很好的解释为什么你认为你的想法.

提前致谢

解决方法 请记住,像CA1002这样的错误真的适用于图书馆. WCF服务不是一个库,它是通过SOAP,REST等将序列化的端点.

你会发现,如果你尝试暴露一个接口,如ICollection< T>或IList T,您将收到类型无法序列化的错误.实际上,List< T>这可能是最好的选择.当代理在客户端生成时,默认情况下最终以数组形式出现,并且许多(如果不是大多数人)将其更改为List< T>,所以90%的时间,无论你如何选择公开它,这是客户端将要看到的类型.

我会注意到,一般来说,很好的做法是不要从一般的WCF *** 作或Web服务“返回”一个集合.创建一个包含您想要的集合的代理类更常见,并返回,即:

[OperationContract]OrdersResult Getorders(OrderRequest request);

代理类可能如下所示:

[DataContract]public class OrdersResult{    [DataMember]    public List<Order> Orders { get; set; }}

这样,如果您决定需要向请求或响应添加更多数据,则可以这样做,而不会导致客户端的更改.

附录:这里使用WCF的真正问题是WCF不知道特定类型仅用于出站数据.当任何类通过WCF服务公开时,WCF假定它可以是请求或响应的一部分,如果它是请求的一部分,则该类型必须是具体的,并且不能是不可变的.这就是所有其他愚蠢限制的原因,如要求财产设定者.

您在这里根本没有选择,但使用具体的,可变的集合类型,在大多数情况下,这意味着数组或通用列表.

总结

以上是内存溢出为你收集整理的c# – WCF OperationContract – 哪个通用集合类型应该公开?全部内容,希望文章能够帮你解决c# – WCF OperationContract – 哪个通用集合类型应该公开?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1258902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存