Wednesday, October 06, 2004

Method Overloading in WebServices

Web services are also classes just like any other .NET classes. Nevertheless they have methods marked as WebMethods that can be exposed by the WebServices to be consumed by the outside world. Apart from these WebMethods they can also have normal methods like any other classes have.
Since a web service is a class it can utilize all the OO features like method overloading. However to use this feature on WebMethods we need to do something more that is explained in this article.

Creating WebMethods:

Let us create a simple WebService that has the following overloaded methods:

public string GetGreeting()
public string GetGreeting(string p_Name)
public string GetGreeting(string p_Name, string p_Message)


All these three methods return variants of a Greeting message to the WebClient. Let us now mark the methods as Web Methods. To acheive this apply the [WebMethod] attribute to the public methods.

[WebMethod]
public string GetGreeting()
{

return "Hi Guest";
}

[WebMethod]
public string GetGreeting(string p_Name)
{

return "Hi " + p_Name + "!";
}

[WebMethod]

public string GetGreeting(string p_Name, string p_Message)
{

return "Hi " + p_Name + "!" + p_Message;
}

This would compile fine. Run the WebService in the browser. That should give an error saying that the GetGreeting() mthods use the same message name 'GetGreeting' and asking to use the MessageName property of the WebMethod.

Adding the MessageName property:

Add the MessageName property to the WebMethod attribute as shown below:

[WebMethod]
public string GetGreeting()
{
return "Hi Guest";
}

[WebMethod (MessageName="WithOneString")]
public string GetGreeting(string p_Name)
{
return "Hi " + p_Name + "!";
}

[WebMethod (MessageName="WithTwoStrings")]
public string GetGreeting(string p_Name, string p_Message)
{
return "Hi " + p_Name + "!" + p_Message;
}

Now compile the WebService and run in the browser. You can see that the first method is displayed as GetGreeting wherein for the second and third method the alias we set using the MessageName property is displayed.

2 comments:

Anonymous said...

gud 2torial!!!
*--real blogger--*

imomin said...

I get following error:

R2304: Operation name overloading in a wsdl:portType is disallowed by the Profile. A wsdl:portType in a DESCRIPTION MUST have operations with distinct values for their name attributes. Note that this requirement applies only to the wsdl:operations within a given wsdl:portType. A wsdl:portType may have wsdl:operations with names that are the same as those found in other wsdl:portTypes.