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
是自动生成的,下次我从服务更新时,我的更改将消失。
怎么了?
Configure Service Reference对话框使您能够配置生成代理的行为。这包括用于配置集合和字典使用的类型的选项。如果IDictionary
不在那里,您可能无法从Visual Studio中生成使用它的代理。
但是请记住,生成的客户端只是以商定的格式交换数据。如果您可以获得包含服务契约(或正确格式的服务契约)的程序集,则可以使用通道工厂来生成客户端。通过有线发送的数据格式将是相同的,因此与您的服务兼容。
您可以在这里看到一个通道工厂的简单示例: