将单个复杂类型参数传递给 wcf 操作问题
本文关键字:wcf 操作 问题 参数传递 单个 复杂 类型 | 更新日期: 2023-09-27 18:35:33
我正在尝试将一个复杂类型的参数发送到 WCF 操作,但是当我尝试使用它时,操作的签名变得不同并转换为简单类型的多个参数。
如何在客户端保留服务器中声明的签名?
例如,我的 WCF 如下所示:
[MessageContract]
public class Foo
{
[MessageBodyMember]
public int ID {get; set;}
[MessageBodyMember]
public DateTiem Birthdate {get; set;}
[MessageBodyMember]
public string Name {get; set;}
}
[ServiceContract]
public interface IMyService
{
[OperationContract]
string Get(Foo request);
}
public class MyService
{
public string Get(Foo request)
{
// My Code
}
}
克林特方面看起来像:
MySvc.MyServiceClient c = new MySvc.MyServiceClient();
// The following code does not work
MySvc.Foo req = new MySvc.Foo();
req.Id = 5;
req.Birthdate = DateTiem.Now;
req.Name = "John";
c.Get(req);
//I should pass the parameters like the following since the signature here be different
c.Get(5, DateTime.Now, "John");
有多种解决方案。
最好是将协定(数据和服务)对象编译为公共客户端程序集,并在客户端和服务器端使用相同的程序集(因此根本不需要创建服务引用)。
最好根本不使用消息协定,只使用简单的数据协定。在客户端添加服务引用时,这些通常看起来就像服务器端一样。
最后,如果您坚持使用消息协定(恕我直言,您不应该),则可以在添加服务引用时要求Visual Studio在客户端生成消息协定(应该有一个复选框)。