Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF中的HashSet_C#_Wcf_Hashset_Proxy Classes_Service Reference - Fatal编程技术网

C# WCF中的HashSet

C# WCF中的HashSet,c#,wcf,hashset,proxy-classes,service-reference,C#,Wcf,Hashset,Proxy Classes,Service Reference,我正在WCF接口中使用哈希集 [ServiceContract] public interface IwcfServerSync { [OperationContract] void Test(HashSet<int> someHashSet); } [服务合同] 公共接口IwcfServerSync { [经营合同] 无效测试(HashSet-someHashSet); } 当我创建一个服务引用时,HashSet会变成int[] 我添加了一个ServiceKno

我正在WCF接口中使用哈希集

[ServiceContract]
public interface IwcfServerSync
{
    [OperationContract]
    void Test(HashSet<int> someHashSet);
}
[服务合同]
公共接口IwcfServerSync
{
[经营合同]
无效测试(HashSet-someHashSet);
}
当我创建一个服务引用时,HashSet会变成int[]

我添加了一个ServiceKnownType:

[ServiceKnownType(typeof(System.Collections.Generic.HashSet<int>))]
[ServiceKnownType(typeof(System.Collections.Generic.HashSet))]
并尝试了一些配置,但无法完全改变

如果我改变它,硬编码一切工作,但它真的很烦人,改变它每次更新我的参考


我可能做错了什么,有什么建议或想法吗?

当集合通过电线时,它们会被简化。您可以通过IDE和命令行(
svcuti/collectionType
)指定集合类型,但它将应用于API上的所有集合。我认为您应该接受它,并通过代码处理不匹配。最终,在网络上,集合只是xml(至少在标准绑定上是这样)——类似于:

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

...
...
...
-因此,为什么它不能(从模式中)区分数组(
t[]
)、
列表
哈希集
、以及
MyFunkyCollection

请注意,如果使用程序集共享(即,相同的服务契约程序集位于客户端和服务器上),则不会发生这种情况,但这违背了SOA/mex的意图。但是is是一种被广泛使用的方法,因此IDE直接支持它,并通过开关(
svcutil/reference
)支持命令行



对于支持它的IDE。。。如果在类库(dll)中写入服务协定和数据协定,然后从两个项目(服务器项目和客户端项目)向该库添加程序集引用(即dll引用或项目引用)。现在将服务引用从客户端项目添加到服务器端点(即.svc)。如果您使用的是VS2008,它将自动检查本地引用的类型,并使用这些类型来代替代理生成-意思是:您的客户端代码使用类库中的
IwcfServerSync
,类库已经知道是否要使用
HashSet
等。

谢谢您的回答,我已经得到了答案一位同事的“通过代码处理不匹配:)只是想知道是否有更好的解决方案..事实上,我并不介意服务契约在共享程序集中,我从远程处理切换到客户端,客户端确实知道接口(构建游戏,需要在iis和游戏服务器之间移动对象,所有这些都是自己编写的).我只是找不到IDE支持它的地方..哦..没错,我需要使用接口,但出于某种原因IDE仍然创建接口并使用它来实现代理。这次我错过了什么?这很奇怪…你可以尝试将类库添加到“重用指定引用程序集中的类型”中“名单?谢谢你的支持!当然,我尝试了“重用”的方法——由于某种原因,没有奏效。最后,我决定不使用IDE或svcuti.exe,这很难控制它们-更改OperationContract签名(移出参数顺序)和一些泛型到数组,因此维护将很困难(同样,我有两个自己编写的应用程序,所以它不是真正的“外部”服务)只是手动编写:公共类MyClass:ClientBase,WCFInterface这里有一个很好的指南和更多关于初学者的技巧: