Web 服务中的函数重载






3.23/5 (20投票s)
如何在 Web 服务中执行函数重载
引言
Web 服务中的函数重载不像在类中那样直接。在尝试重载成员函数时,我们创建两个或多个具有相同名称但参数不同的方法。但这种方法在 Web 服务中不起作用,并且会在运行时显示错误,因为 WSDL 不支持相同的函数名称。
重载 Web 服务
在尝试重载 Web 服务中的 Web 方法并在构建后,它会成功运行。但是,当我们尝试运行或调用时,它会显示错误消息。我们可以通过一个例子来演示这一点。
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);
}
}
}
在上面的例子中,我们创建了一个名为 OverloadingInWebService
的 Web 服务。在 Web 服务中,我们添加了 Description
属性,用于向客户端描述 Web 服务的用途。在上面的 Web 服务中,我们有两个重载的 WebMethod
。
public int Add(int a, int b)
和
public float Add(float a, float b)
运行此 Web 服务时,将显示以下运行时错误。

解决上述错误
解决此问题的步骤非常简单。使用 Web Method 属性开始每个方法。添加 Description
属性以添加 Web 方法的描述,并添加 MessageName
属性以更改 Web 方法的名称。
[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);
}
}
}
上述错误的原因
Web 服务支持重载。但是,当生成 WSDL(Web 服务描述语言)时,它将无法区分方法,因为 WSDL 不基于参数进行处理。通过传递 Web 方法 –‘MessageName Property
’,它会更改 WSDL 中的方法名称。请参阅下面的 WSDL,操作名称为 Add
,但输入方法名称为 AddInt
,输出方法名称也相同(AddInt
)。对于浮点数也适用。
<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>
历史
- 2008年10月9日:初始发布