我有一个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对象是在代理类中正确生成的。
知道输入参数丢失的原因吗?
答案 0 :(得分:3)
尝试使用DataContract。它可能会解决您的问题
[DataContract]
public class SourceDataQuery
{
[DataMember]
public int DataSourceId { get; set; }
....
}
答案 1 :(得分:3)
尝试将serviceclient对象包装在IService接口中,例如write:
ServiceReference1.IService1 serviceclient = new ServiceReference1.Service1Client();
而不是
ServiceReference1.Service1Client serviceclient = new ServiceReference1.Service1Client();