我必须实现其暴露值(整数,自定义类等)的列表的web服务。 我的工作溶液返回List<T>,并且根据的FxCop最好是返回Collection<T>ReadOnlyCollection<T>

如果我选择返回一个ICollection,web服务等示出的错误:

  

要为XML序列化,从Add(System.Int32)继承的类型必须在其继承层次结构的各个层次的System.Collections.ObjectModel.ReadOnlyCollection的实现。   1 [[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] <=>不实现<=>

什么是你最喜欢的内部使用一个<=>和暴露<=>方式? (使用C#,优选框架2.0只)

有帮助吗?

解决方案

列表或收藏是精细在这种情况下。

在原来的问题而言,你可以在一个集合包裹一个List 得很干脆:

List<Foo> list = new List<Foo>();
// ...
Collection<Foo> col = new Collection<Foo>(list);

这是一个真正的包装;添加项目到包装(COL),它被添加到列表中。这可能是稍显混乱,因为许多这样的构造函数使用参数做初步的人口,但不链接到原始列表。收集是一个例外;-p

既然你是一个Web服务的边界上,从FxCop的这一建议并不适用。这是非常有用的(内嵌埃里克利珀最近博客),以防止来电者踏着被叫方的记忆 - 但在一个Web服务分布式场景,根本不适用。事实上,由于网络服务具有一定的通用场景数据可查的问题,一个简单的数组可以说是非常实用和务实的web服务边界。在Eric的博客的背景下 - 在这种情况下,没有主叫/被叫问题的问题,因为两者之间的执行障碍。

在WSDL / MEX而言,我怀疑所有3个(名单/收集/阵列)将刚刚成为元素块 - 所以你可能井去取其最方便

其他提示

我通常是从一个WCF Web服务返回的IList :FxCop的是这还不够满意。 不知道这是否与ASMX Web服务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top