2

我有一个定义如下的 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 对象是在代理类中正确生成的。

知道为什么缺少输入参数吗?

4

2 回答 2

3

尝试改用 DataContract。它可能会解决你的问题

[DataContract]
      public class SourceDataQuery
        {

            [DataMember]
            public int DataSourceId { get; set; }

            ....
        }
于 2011-03-01T20:51:47.650 回答
3

尝试将 serviceclient 对象包装在 IService 接口中,例如写:

ServiceReference1.IService1 serviceclient = new ServiceReference1.Service1Client();

代替

ServiceReference1.Service1Client serviceclient = new ServiceReference1.Service1Client();
于 2011-09-08T12:57:14.933 回答