Function Overloading in Web Services
http://www.codeproject.com/KB/webservices/OverloadingInWebService.aspx
Introduction
The function overloading in Web Service is not as straightforward as in class. While trying to overload member function, we make two or more methods with the same name with different parameters. But this will not work in web services and will show runtime error because WSDL is not supported by the same method name.
Overloading Web Services
While trying to overload Web Methods in Web Services and after doing the build, it will work successfully. But when we try to run or consume, it will show an error message. We can show this using an example.
namespace
TestOverloadingWebService
{
[WebService(Namespace = "
http://tempuri.org/"
, Description="
<b> Function
overloading in Web Services </b>"
)]
public
class
OverloadingInWebService : System.Web.Services.WebService
{
[WebMethod()]
public
int
Add(int
a, int
b)
{
return
(a + b);
}
[WebMethod()]
public
float
Add(float
a, float
b)
{
return
(a + b);
}
}
}
In the above example, we made one web service having class OverloadingInWebService
. In the Web Service, we have added attribute Description
, which is used to describe the web service purpose to client. In the above Web Service, we have two overloaded WebMethod
s:
public
int
Add(int
a, int
b)
and
public
float
Add(float
a, float
b)
While running this Web service, it will show the following runtime error.
Solution for the Above Error
The procedure to solve this problem is very easy. Start each method with a Web Method attribute. Add Description
property to add a description of web method and MessageName
property to change web method name.
[WebMethod(MessageName = "
<name>"
, Description = "
<description>"
)]
namespace
TestOverloadingWebService
{
[WebService(Namespace = "
http://tempuri.org/"
, Description="
<b> Function
overloading in Web Services </b>"
)]
public
class
OverloadingInWebService : System.Web.Services.WebService
{
[WebMethod(MessageName = "
AddInt"
, Description = "
Add two integer
Value"
, EnableSession = true
)]
public
int
Add(int
a, int
b)
{
return
(a + b);
}
[WebMethod(MessageName = "
AddFloat"
, Description = "
Add two Float
Value"
, EnableSession = true
)]
public
float
Add(float
a, float
b)
{
return
(a + b);
}
}
}
Reason for the Above Error
The Overloading is supported by web services. But when WSDL (Web Service Description Language) is generated, it will not be able to make the difference between methods because WSDL does not deal on the base of parameters. By passing web methods –‘MessageName Property
’, it changes the method name in WSDL. See the WSDL given below, the operation name is Add
but the input method name is AddInt
as well as output method name is also same (AddInt
). The same will apply for Float also.
<
wsdl:operation
name
="
Add"
>
<
wsdl:documentation
xmlns:wsdl
="
http://schemas.xmlsoap.org/wsdl/"
>
Add
two integer Value<
/
wsdl:documentation
>
<
wsdl:input
name
="
AddInt"
message
="
tns:AddIntSoapIn"
/
>
<
wsdl:output
name
="
AddInt"
message
="
tns:AddIntSoapOut"
/
>
<
/
wsdl:operation
>
<
wsdl:operation
name
="
Add"
>
<
wsdl:documentation
xmlns:wsdl
="
http://schemas.xmlsoap.org/wsdl/"
>
Add
two Float Value<
/
wsdl:documentation
>
<
wsdl:input
name
="
AddFloat"
message
="
tns:AddFloatSoapIn"
/
>
<
wsdl:output
name
="
AddFloat"
message
="
tns:AddFloatSoapOut"
/
>
<
/
wsdl:operation
>
History
- 9th October, 2008: Initial post
License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)