1

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

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

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

非常感谢您的帮助

4

2 回答 2

3

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

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"})

仅使用 Country 传递参数:

WebMethod(New Parameters With {.Country = "China"})
于 2013-05-30T15:28:12.320 回答
1

您可以将变量声明为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)在此示例中,两个参数都是可选的。

于 2013-05-30T17:32:40.553 回答