Home » c# » Why method overloading is not allowed in WCF?

Why method overloading is not allowed in WCF?

Posted by: admin November 29, 2017 Leave a comment

Questions:

Assume that this is a ServiceContract

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

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

}

Method overloading is allowed in C#, but WCF does not allow you to overload operation contracts
The hosting program will throw an InvalidOperationException while hosting

Answers:

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);
}

Questions:
Answers:

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.