Operation Overloading
Programming languages such as C++ and C# support method overloading; that is, defining two methods with the same name but with different parameters. For example, this is a valid C# interface definition:
interface ICalculator
{
int Add(int arg1,int arg2);
double Add(double arg1,double arg2);
}However, operation overloading is invalid in the world of
WSDL-based operations, since all operations must have unique names (they
are identified by name in the messages). 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]
int Add(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 each overloaded operation, 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); ...