【发布时间】:2011-12-13 23:59:09
【问题描述】:
我有一个 WCF 方法定义如下:
[OperationContract]
Message GetSourceData(SourceDataQuery sourceDataQuery);
而实际的实现是这样的:
public Message GetSourceData(SourceDataQuery sourceDataQuery)
{
IEnumerable<ExportRow> sourceData = repo.GetData();
var customBodyWriter = new CustomBodyWriter(sourceData);
var message = Message.CreateMessage(MessageVersion.Soap11, "GetSourceData", customBodyWriter);
return message;
}
SourceDataQuery 对象:
[MessageContract]
public class SourceDataQuery
{
[MessageBodyMember]
public int DataSourceId { get; set; }
[MessageBodyMember]
public int[] FiledIds { get; set; }
[MessageBodyMember]
public string Filter { get; set; }
[MessageBodyMember]
public string Sort { get; set; }
}
我的问题是当我将此 WCF 服务添加到另一个项目并通过添加服务引用创建代理时,我的代理类有一个 GetSourceData 方法,但它的输入参数丢失。它不带任何参数。我可以看到 SourceDataQuery 对象是在代理类中正确生成的。
知道为什么缺少输入参数吗?
【问题讨论】:
-
检查 WSDL。很可能用于引用服务的 URL 具有较旧的代码,即没有此参数的方法。
-
@amit_g,我从scrath创建了一个新项目,它也有同样的问题。
-
正如@amit_g 所说,听起来您的服务运行的版本不正确。要检查这一点,您可以尝试重建服务并在不同的服务路径下发布。
-
如果在添加服务引用对话框的高级设置中加厚/取消加厚始终生成消息合同会怎样?
标签: wcf message proxy-classes messagecontract