WCF中的WCF服务引用未使方法类型正确

Met*_*nix 5 .net c# wcf asp.net-mvc-4

WCF服务库指定:

[OperationContract]
void SaveData(IDictionary visitorData);
Run Code Online (Sandbox Code Playgroud)

在使用MVC项目中将服务引用添加到wcf库(必须取消选中"在引用的程序集中重用类型"以使其生成代码)会导致它在Reference.cs中生成以下内容:

public void SaveData(System.Collections.Generic.Dictionary<object, object> visitorData) {
    base.Channel.SaveData(visitorData);
}
Run Code Online (Sandbox Code Playgroud)

结果,当我打电话

visitorActions.SaveData(requestInfo);
Run Code Online (Sandbox Code Playgroud)

(有了requestInfo类型IDictionary)我得到了以下编译器错误,令我完全没有意外:

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

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

什么给出了什么?

ta.*_*.is 1

通过“配置服务引用”对话框,您可以配置生成的代理的行为。这包括用于配置集合和字典使用的类型的选项。如果IDictionary其中不存在,您可能无法生成在 Visual Studio 中使用它的代理。

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

您可以在此处查看通道工厂的简单示例。