客户端中的WCF操作期望与服务器中定义的不同参数集不同



我是WCF的新手。我有一个示例WCF服务器,并且客户端消耗了该服务。我有一个称为getEmployer4的操作合同4,它接受雇员requestbo并返回implyersponsebo,这两种类型都被装饰为MessageCecntract

    public EmployerResponseBO getEmployer4(EmployerRequestBO rqst)
    {
        return new EmployerResponseBO
        { CompanyName = "Apple", CompanyAddress = "US" };
    }

我的雇员Requestbo看起来像:

[MessageContract(IsWrapped = true, WrapperName = "EmployerRequest", WrapperNamespace ="http://mycompany.com/services")]
public class EmployerRequestBO
{
    [MessageHeader(Namespace = "http://mycompany.com/services")]
    public string LicenseKey
    {
        get; set;
    }
    private int _regID;
    [MessageBodyMember(Order = 1, Name = "CompanyRegistrationID", Namespace = "http://mycompany.com/services")]
    public int RegistrationID
    {
        get
        {
            return _regID;
        }
        set
        {
            _regID = value;
        }
    }

问题是,当我尝试使用以下代码来调用客户端的Operaiton:

        ServiceReference_EmployerService.EmployerClient client = new ServiceReference_EmployerService.EmployerClient("BasicHttpBinding_IEmployer");
        ServiceReference_EmployerService.EmployerRequestBO request = new ServiceReference_EmployerService.EmployerRequestBO("ABC123", 123);
        ServiceReference_EmployerService.EmployerResponseBO response= client.getEmployer4(request);

getEmployer4 do not ot ExperserRequestbo参数,错误如下

单击以查看附件

没有任何参数与所需的正式相对应 参数" company registrationId" 'lomosplient.getEmployer4(字符串,ref int,out string('。

谁能解释为什么它要求原始类型而不是MessageCecntract类型?谢谢!

我花了很多时间才知道,如果您的操作通过 MessageContract 进行通信,则需要创建代理人:

ServiceReference_EmployerService.**IEmployer** client =
new ServiceReference_EmployerService.EmployerClient("BasicHttpBinding_IEmployer");

,如果您通过 Datacontract进行操作,则需要创建代理,例如:

ServiceReference_EmployerService.**EmployerClient** client2 = 
new ServiceReference_EmployerService.EmployerClient("BasicHttpBinding_IEmployer");

最新更新