Introduction
This blog gives you one trick of How to Overload Operation in WCF Service?
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:
Example
interface IMOverload
{
int Add(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 IMOverload
{
[OperationContract]
int Add(int arg1, int arg2);
[OperationContract]
double Add(double arg1, double arg2);
}
When you run the service this error will be occure.
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 show
below :
[ServiceContract]
public interface IMOverload
{
// TODO: Add your service operations here
//Here we used the trick of Name property of OperationContract
[OperationContract(Name = "AddInt")]
int Add(int arg1, int arg2);
[OperationContract(Name = "AddDouble")]
double Add(double arg1, double arg2);
}
Finally, use the Name property on the imported contract on the client side to
alias and overload the methods, matching the imported operation names, as show
below :
[ServiceContract]
public interface IMOverload
{
// TODO: Add your service operations here
//Here we used the trick of Name property of OperationContract
[OperationContract(Name = "AddInt")]
int Add(int arg1, int arg2);
[OperationContract(Name = "AddDouble")]
double Add(double arg1, double arg2);
}
public class MOverload : IMOverload
{
public int Add(int arg1, int arg2)
{
return arg1 + arg2;
}
public double Add(double arg1, double arg2)
{
return arg1 + arg2;
}
}
Now the client can benefit from the readable and smooth programming model
offered by overloaded operations :
class Program
{
static void Main(string[] args)
{
var proxy = new MOverloadClient();
var res = proxy.AddInt(7, 5);
var res2 = proxy.AddDouble(10.5, 1.5);
Console.WriteLine("Result of Integer : " + res);
Console.WriteLine("Result of Double : " + res2);
}
}

Jeetendra GundPosted Oct 8, 2013, 3:21 AM
Thanks sir....
Prasenjit DeyPosted Oct 7, 2013, 9:43 AM
nice