Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.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中的WCF服务引用未获取正确的方法类型_C#_.net_Wcf_Asp.net Mvc 4 - Fatal编程技术网

C# WCF中的WCF服务引用未获取正确的方法类型

C# WCF中的WCF服务引用未获取正确的方法类型,c#,.net,wcf,asp.net-mvc-4,C#,.net,Wcf,Asp.net Mvc 4,WCF服务库指定: [OperationContract] void SaveData(IDictionary visitorData); 将消费MVC项目中的服务引用添加到wcf库(必须取消选中“在引用的程序集中重用类型”以使其生成代码)会导致其在reference.cs中生成以下内容: public void SaveData(System.Collections.Generic.Dictionary<object, object> visitorData) { bas

WCF服务库指定:

[OperationContract]
void SaveData(IDictionary visitorData);
将消费MVC项目中的服务引用添加到wcf库(必须取消选中“在引用的程序集中重用类型”以使其生成代码)会导致其在reference.cs中生成以下内容:

public void SaveData(System.Collections.Generic.Dictionary<object, object> visitorData) {
    base.Channel.SaveData(visitorData);
}
(使用
IDictionary
类型的
requestInfo
)我完全没有料到会出现以下编译器错误:

参数1:无法从“System.Collections.IDictionary”转换为“System.Collections.Generic.Dictionary”

是的,我可以进入并更改代码,明确地说
IDictionary
,但是
Reference.cs
是自动生成的,下次我从服务更新时,我的更改将消失

那么是什么呢?

该对话框允许您配置生成的代理的行为。这包括用于配置用于集合和字典的类型的选项。如果
IDictionary
不在其中,则可能无法在Visual Studio中生成使用它的代理

但请记住,生成的客户机只是以约定的格式交换数据。如果您可以获得包含服务契约(或正确格式的服务契约)的程序集,则可以使用通道工厂生成客户端。通过有线传输的数据格式将是相同的,因此与您的服务兼容


您可以看到通道工厂的一个简单示例。

如果您可以与客户机项目共享服务合同的程序集,那么您是否也可以选择非通用集合类型,然后只需使用通道工厂并避免svcutilTo为WCF客户机指定列表或字典集合类型,从集合类型和字典集合类型列表中选择类型。我现在明白了。啊。我正在抓取Request.Browser.Capabilities对象(类型为
IDictionary
)。我想我可以把它转换成普通的。哇,不能使用可枚举字典类型。看起来有点近视。如果你弹出这个作为答案,我会重新发布你链接的相关部分,并将其标记为答案。谢谢。要为WCF客户端指定列表或字典集合类型,请从集合类型和字典集合类型列表中选择类型。将数据协定方法签名更改为字典而不是IDictionary可以解决此问题。将词典编入词典完全是另一回事,但这是另一个时代的另一个故事。Thanks@MetalPhoenix如果你不熟悉渠道工厂,我建议你去看看。当我第一次意识到他们能做什么时(不再引用.cs)
mind==blow
我会更深入地研究这个问题,谢谢你的鼓励。我相信我的大脑也会爆炸。
visitorActions.SaveData(requestInfo);