【问题标题】:web method in vb.net: optional parameters - too many for overloadingvb.net 中的 web 方法:可选参数 - 太多而无法重载
【发布时间】:2013-05-30 14:39:23
【问题描述】:

老话题,但有一个转折 - 我搜索并找不到答案。

我知道我不能在 web 方法中使用带有默认值的可选参数,所以我必须使用函数重载但是......我看到了一个可选参数的示例,我有大约 10 个!

如果我对 3 个可选参数理解得很好,我将需要 7 个重载函数(3 个用于 1 个参数,3 个用于 2,1 个用于整个 3)那么我需要多少个 10?很多!一定有更好的方法,不是吗?请不要告诉我使用 WCF - 我现在不能切换到那个,我必须使用 WSDL

非常感谢您的帮助

【问题讨论】:

  • 这是很多可选参数!有时经过没有什么是足够好的。

标签: .net vb.net web-services overloading optional


【解决方案1】:

您可以只传递一个具有默认值属性的对象(类),而不是使用许多可选参数。这样它就可以像可选参数一样工作:

Public Class Parameters

    Public Property Name As String = "Undefined"
    Public Property Country as string = "United Kingdom"

End Class

定义您的 WebMethod 以接受此对象类型

Public Function WebMethod(prm as Parameters)

用法:

使用名称传递参数:

WebMethod(New Parameters With {.Name = "Jane"})

使用名称和国家/地区传递参数:

WebMethod(New Parameters With {.Name = "Amr", .Country = "Egypt"})

仅使用国家/地区传递参数:

WebMethod(New Parameters With {.Country = "China"})

【讨论】:

  • 非常感谢您的回答。我承认我是 WEB 领域的初学者,所以我想澄清这一点 - 我的客户是一个网站,他必须采用这些参数并创建这个对象类?这对他来说不是问题吗?
【解决方案2】:

您可以将变量声明为Nullable (of <your type>),并且只需一个包含所有 10 个参数的 Web 服务

这是您的 Web 方法,只有 2 个可选参数,但您可以轻松地将其扩展到 10 个:

    <WebMethod(Description:="TEST1")> _
Public Function TEST1(<XmlElement()> param1 As Nullable(Of Double), <XmlElement()> param2 As Nullable(Of Double)) As <XmlElement()> Double
    Try
        Dim result As Double = 0

        If Not param1 Is Nothing Then
            result += param1
        End If

        If Not param2 Is Nothing Then
            result += param2
        End If
        Return result
    Catch ex As Exception

    End Try
    Return 0
End Function

这个 SoapUI 调用:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://mysite.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <not:TEST1>
         <not:param1>1</not:param1>
         <not:param2>2</not:param2>
      </not:TEST1>
   </soapenv:Body>
</soapenv:Envelope>

结果如下:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <TEST1Response xmlns="http://mysite.org/">
         <TEST1Result>3</TEST1Result>
      </TEST1Response>
   </soap:Body>
</soap:Envelope>

这个 SoapUI 调用:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:not="http://mysite.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <not:TEST1>
         <not:param1>1</not:param1>
      </not:TEST1>
   </soapenv:Body>
</soapenv:Envelope>

结果如下:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <TEST1Response xmlns="http://mysite.org/">
         <TEST1Result>1</TEST1Result>
      </TEST1Response>
   </soap:Body>
</soap:Envelope>

Nullable (of Double) 在这个例子中两个参数都是可选的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    相关资源
    最近更新 更多