WCF中的服务引用没有获得正确的方法类型

本文关键字:方法 类型 服务 引用 WCF | 更新日期: 2023-09-27 18:09:33

WCF服务库指定:

[OperationContract]
void SaveData(IDictionary visitorData);

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

public void SaveData(System.Collections.Generic.Dictionary<object, object> visitorData) {
    base.Channel.SaveData(visitorData);
}
因此,当我调用 时
visitorActions.SaveData(requestInfo);

(与IDictionary类型的requestInfo)我得到,我完全没有惊讶,以下编译器错误:

参数1:不能从'System.Collections. '转换。

"dictionary"到"System.Collections.Generic.Dictionary"

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

怎么了?

WCF中的服务引用没有获得正确的方法类型

Configure Service Reference对话框使您能够配置生成代理的行为。这包括用于配置集合和字典使用的类型的选项。如果IDictionary不在那里,您可能无法从Visual Studio中生成使用它的代理。

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

您可以在这里看到一个通道工厂的简单示例: