Why method overloading is not allowed in WCF?

前端 未结 3 1518
栀梦
栀梦 2020-11-29 00:42

Assume that this is a ServiceContract

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

    [O         


        
相关标签:
3条回答
  • 2020-11-29 00:57

    In a nutshell, the reason you cannot overload methods has to do with the fact that WSDL does not support the same overloading concepts present inside of C#. The following post provides details on why this is not possible.

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

    To work around the issue, you can explicitly specify the Name property of the OperationContract.

    [ServiceContract]
    public interface MyService
    {
        [OperationContract(Name="SumUsingInt")]
        int Sum(int x, int y);
    
        [OperationContract(Name="SumUsingDouble")]
        int Sum(double x, double y);
    }
    
    0 讨论(0)
  • 2020-11-29 01:12

    Because when invoking over HTTP/SOAP, having the same method name in your contract would mean that there's no way to determine which particular method the client is about to invoke.

    Remember that when invoking web methods over http, arguments are optional and are initialized with default values if missing. This means that invocation of both methods could look exactly the same way over HTTP/SOAP.

    0 讨论(0)
  • 2020-11-29 01:15

    The reason being that WCF is supposed to be universally usable by different clients and those clients do not have to be .NET and may also not allow Operator/Method overloading in their frameworks. If that is the case, then this method becomes unusable by those frameworks and therefore to ensure it is universally usable, WCF disallows and provides you with a name property in the OperationContract attribute to specify a different name. If the client is a .NET, then WCF will automatically show it as a method overload but otherwise it will generate a new method with the name specified in the name property.

    0 讨论(0)
提交回复
热议问题