为什么WCF中不允许方法重载?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

假设这是ServiceContract

[ServiceContract]
public interface MyService
{
    [OperationContract]
    int Sum(int x, int y);

    [OperationContract]
    int Sum(double x, double y);

}

方法重载在C#中是允许的,但是WCF不允许重载operation contracts宿主程序将抛出InvalidOperationException

提问于
用户回答回答于

简而言之,无法重载方法的原因与WSDL不支持C#中存在的相同重载概念有关。以下文章详细说明了为什么这是不可能的。

http://jeffbarnes.net/blog/post/2006/09/21/Overloading-Methods-in-WCF.aspx

要解决该问题,可以明确指定该Name属性OperationContract

[ServiceContract]
public interface MyService
{
    [OperationContract(Name="SumUsingInt")]
    int Sum(int x, int y);

    [OperationContract(Name="SumUsingDouble")]
    int Sum(double x, double y);
}
用户回答回答于

因为在通过HTTP / SOAP进行调用时,在合同使用相同的方法名称意味着无法确定客户端要调用哪种特定的方法。

请记住,通过http调用web方法时,参数是可选的,如果缺失,则使用默认值进行初始化。这意味着这两个方法的调用在HTTP / SOAP上看起来完全相同。

扫码关注云+社区