asmx asp.net webservice возвращает несколько классов wsdl - PullRequest
0 голосов
/ 18 августа 2011

Мы разрабатываем веб-сервис для клиента. Мы не предлагаем выбрасывать SoapExceptions, поэтому вместо этого мы перехватываем все стороны сервера исключений и возвращаем пользовательский класс Exception.

Public Class Order
...
End Class

Public Class MyException
...
End Class

А потом в моем веб-сервисе есть функция (веб-метод):

Public Function GetOrder(ByVal id As Integer) As Object

    Try
        ...
        Return New Order()
    Catch ex As Exception
        Return New MyException(ex.Message)
    End Try

End Function

Теперь проблема в том, что мой веб-метод возвращает тип [Object]. Сгенерированный wdsl не содержит ни порядок, ни исключение.

Я могу изменить [Объект] на [Заказ] или [MyException], но только один из них генерируется в wsdl.

Так кто-нибудь имеет представление о том, как я должен справиться с этим? Мне нужен и тип MyException, и тип Order в моем wsdl, но я просто не могу заставить его работать.

Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Если ваше определение MyException

Public Class MyException
        inherits System.Exception
    ...
    End Class

, вам не нужно возвращать пользовательское исключение, просто бросьте его.

тогда вы можете определить

Public Function GetOrder(ByVal id As Integer) As Order

    Try
        ...
        Return New Order()
    Catch ex As Exception
        Throw New MyException(ex.Message)
    End Try

End Function

Насколько я помню (и это было давно), попытка вернуть несколько объектов из веб-метода может оказаться чрезвычайно проблемной

1 голос
/ 18 августа 2011

Если вы действительно хотите вернуть несколько объектов, то, возможно, вам следует создать объект-оболочку, например, что-то вроде этого:

'please note: I don't normally use VB.NET, so there might be some errors
Public Class OrderResponse

Public Property Order() As Order
    Get
        Return m_Order
    End Get
    Set
        m_Order = Value
    End Set
End Property
Private m_Order As Order

Public Property Exception() As MyException
    Get
        Return m_Exception
    End Get
    Set
        m_Exception = Value
    End Set
End Property
Private m_Exception As MyException
End Class

Затем измените ваш метод, чтобы он возвращал экземпляр этого класса со свойством Order или Exception, установленным на соответствующее значение:

Public Function GetOrder(ByVal id As Integer) As OrderResponse
    ...
End Function
...