我使用一个HashSet在我的WCF接口

[ServiceContract]
public interface IwcfServerSync
{
    [OperationContract]
    void Test(HashSet<int> someHashSet);
}

当我创建服务参考HashSet中变成INT []。

我添加了一个ServiceKnownType:

[ServiceKnownType(typeof(System.Collections.Generic.HashSet<int>))]

和尝试了一些配置,但不能完全使之改变。

如果我改变它硬编码一切正常,但它真的很烦人,每次去改变它一个更新我的参考..

我可能做错事,任何指针或想法?

有帮助吗?

解决方案

当他们去在导线

集合被简化。您可以指定通过IDE和命令行(svcutil /collectionType)集合型,但它会应用到的所有的的API集合。我想你应该接受它,并通过代码处理不匹配。最终,在电线上,集合只是XML(在标准绑定,至少) - 这样的:

<items>
   <item ...>...</item>
   <item ...>...</item>
   <item ...>...</item>
</items>

- 因此,为什么不能(从架构)告诉阵列(T[]),一个List<T>,一个HashSet<T>MyFunkyCollection<T>之间

请注意,如果您使用的共享组件(即相同的服务合同组件在客户端的的服务器),则不会出现这种情况 - 但是,这违背了SOA / MEX的意图。但是,使用的方法相当多 - 。因此IDE支持它直接,并且经由开关(svcutil /reference)命令行


有关的IDE支撑它...如果写在一个类库(dll)的服务合同和数据契约,然后添加的组件的参考(即,一个DLL或参考的项目引用)从两个到这个库项目(服务器项目和客户端项目)。现在添加从客户端项目到服务器端点(在.SVC)一个的服务引用的。如果你正在使用VS2008,它会自动检查本地引用的类型和到位代理代使用这些 - 这意味着:你的客户端代码使用来自类库,它已经知道是否使用IwcfServerSync等的HashSet<T>

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