WCF代理类中缺少方法参数

时间:2011-03-01 20:45:51

标签: wcf message proxy-classes messagecontract

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

知道输入参数丢失的原因吗?

2 个答案:

答案 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();