веб-метод в vb.net: необязательные параметры - слишком много для перегрузки

Тема старая, но с изюминкой - искал и не нашел на нее ответа.

Я знаю, что не могу использовать дополнительные параметры со значениями по умолчанию с веб-методом, поэтому мне приходится использовать перегрузку функций, но... Я видел примеры одного дополнительного параметра, а у меня их около 10!

Если я правильно понимаю для 3 необязательных параметров мне понадобится 7 перегруженных функций (3 для 1 параметра, 3 для 2 и 1 для целых 3) так сколько мне нужно для 10? много! должен быть лучший способ, не так ли? и, пожалуйста, не говорите мне использовать WCF - я не могу переключиться на это сейчас, и мне нужно использовать WSDL

большое спасибо за помощь


person user2366211    schedule 30.05.2013    source источник
comment
Это очень много необязательных параметров! Иногда проходит Ничто не достаточно хорошо.   -  person the_lotus    schedule 30.05.2013


Ответы (2)


Вместо использования многих необязательных параметров вы можете просто передать объект (класс), который имеет свойства со значением по умолчанию. Таким образом, он может работать так же, как необязательные параметры:

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"})
person Matt Wilko    schedule 30.05.2013
comment
большое спасибо за ответ. Я признаю, что я новичок в области WEB, поэтому хочу уточнить - мой клиент - веб-сайт, и он должен будет взять эти параметры и создать этот объектный класс? для него это не проблема? - person user2366211; 31.05.2013

Вы можете объявить переменные как Nullable (of <your type>) и иметь только один веб-сервис со всеми 10 параметрами.

Это ваш веб-метод только с двумя необязательными параметрами, но вы можете легко расширить его до 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) в этом примере оба параметра являются необязательными.

person George    schedule 30.05.2013