Operation Overloading
Programming languages such as C++ and C# support method overloading: defining two methods with the same name but with different parameters. For example, this is a valid C# interface definition:
interface ICalculator
{
intAdd(int arg1,int arg2);
double Add(double arg1,double arg2);
}However, operation overloading is invalid in the world of WSDL-based operations. Consequently, while the following contract definition compiles, it will throw an InvalidOperationException at the service host load time:
//Invalid contract definition:
[ServiceContract]
interface ICalculator
{
[OperationContract]
intAdd(int arg1,int arg2);
[OperationContract]
double Add(double arg1,double arg2);
}However, you can manually enable operation overloading. The trick is using the Name property of the OperationContract attribute to alias the operation:
[AttributeUsage(AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
{
public string Name
{get;set;}
//More members
}You need to alias the operation both on the service and on the client side. On the service side, provide a unique name for the overloaded operations, as shown in Example 2-1.
Example 2-1. Service-side operation overloading
[ServiceContract]
interface ICalculator
{
[OperationContract(Name = "AddInt")]
int Add(int arg1,int arg2);
[OperationContract(Name = "AddDouble")]
double Add(double arg1,double arg2);
}When the client imports the contract and generates the proxy, the imported operations will have ...