我是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");