Why method overloading is not allowed in WCF?

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.


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

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.