65.9K
CodeProject 正在变化。 阅读更多。
Home

Web 服务中的函数重载

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.23/5 (20投票s)

2008年10月9日

CPOL

1分钟阅读

viewsIcon

108353

downloadIcon

489

如何在 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 服务时,将显示以下运行时错误。

ViewError.JPG

解决上述错误

解决此问题的步骤非常简单。使用 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日:初始发布
© . All rights reserved.