【问题标题】:Method signature changes after adding WCF service添加 WCF 服务后方法签名更改
【发布时间】:2012-11-13 08:57:34
【问题描述】:

在我的解决方案中,我创建了一个以消息合同类作为参数的 WCF 服务。

[ServiceContract]
public interface IServiceClass
{
    [OperationContract]
    Employee AddEmployee(Employee employee);

}

 public class ServiceClass : IServiceClass
 {
    public Employee AddEmployee(Employee employee)
    {
       //do something
    }
 }

[MessageContract]
public class Employee
{
    [MessageHeader]
    public string EmployeeNumber { get; set; }

    [MessageBodyMember]
    public string FirstName { get; set; }
    [MessageBodyMember]
    public string LastName { get; set; }
    [MessageBodyMember]
    public DateTime DOB { get; set; }
}

然后我使用添加服务引用选项将此服务添加到我的客户端应用程序。服务添加成功。 然后在我的客户端程序中,我使用了这种方法。但是方法签名已更改。变化如下。

 public void AddEmployee(ref string EmployeeNumber, 
    ref System.DateTime DOB, ref string FirstName, ref string LastName)

我在客户端使用服务如下。

TcpServiceReference.ServiceClassClient service =
            new TcpServiceReference.ServiceClassClient();

注意:TcpServiceReference 是服务名称

我无法理解原因。

【问题讨论】:

  • 您确定签名不存在于 IDE 正在获取的客户端代码中的其他位置吗?尝试搜索它,看看是否找到另一个实例。
  • Belogix:我在 Reference.cs 类中查看了接受 Employee 类的方法在 ServiceReference.TcpServiceReference.IServiceClass 但它不在 ServiceReference.TcpServiceReference.ServiceClassClient 中

标签: c# wcf service-reference


【解决方案1】:

不完全确定 WCF 为何有时会这样做,但如果您使用服务接口,您将获得“正确”的方法签名:

TcpServiceReference.IServiceClass service = 
    new TcpServiceReference.ServiceClassClient();

(这是假设IServiceClass 是 svcutil(添加服务引用)为您生成的服务接口的客户端名称。)

【讨论】:

  • 这对我有用。但我不明白它为什么会发生。如果我添加一个没有参数的方法,它会在 TcpServiceReference.ServiceClassClient 中正确显示。
  • 是的,我也不确定。在使用我自己的 WCF 服务时,我从来没有发生过这种情况,只有在访问 PayPal 服务时才会发生。我想这取决于服务公开的 WSDL 中的某些内容。也许 SOAP 版本(绑定)有影响?
  • 我可以将 Employee 的行为作为 MessageContract 重现,但在使用 DataContract 时不行。有区别吗?
  • @Jocke 啊,可能是这样,我以前从未使用过 MessageContracts。它们显然使您可以更直接地控制 SOAP 消息。
【解决方案2】:

你的问题解决了吗?

看起来代理没有成功生成,除非你还有一个返回 void(并接受四个参数)的 AddEmployee 方法?

我建议您重新生成(删除和创建)服务引用。

干杯 --乔克

【讨论】:

  • 但是您有两个具有不同签名的 AddEmployee 方法吗?一个返回 void,一个返回 Employee?
猜你喜欢
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2018-02-02
  • 2014-05-08
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多