将单个复杂类型参数传递给 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");

将单个复杂类型参数传递给 wcf 操作问题

有多种解决方案。

最好是将协定(数据和服务)对象编译为公共客户端程序集,并在客户端和服务器端使用相同的程序集(因此根本不需要创建服务引用)。

最好

根本不使用消息协定,只使用简单的数据协定。在客户端添加服务引用时,这些通常看起来就像服务器端一样。

最后,如果您坚持使用消息协定(恕我直言,您不应该),则可以在添加服务引用时要求Visual Studio在客户端生成消息协定(应该有一个复选框)。