asmx asp.net webservice return multiple classes wsdl

纵饮孤独 提交于 2019-12-25 01:53:11

问题


We are developing a webservice for a client. We are not supose to throw SoapExceptions, so instead, we catch every exception server side, and return a custom Exception class.

Public Class Order
...
End Class

Public Class MyException
...
End Class

And then in my webservice a function (webmethod):

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

The problem now is, that since my webmethod is returning the type [Object]. The wdsl that is generated does not contain the order, or the exception.

I can change the [Object] to [Order] Or [MyException], but only one of them is generated in the wsdl.

So does anybody have an idea of how i should handle this? I want both the MyException type and the Order type in my wsdl, but i just cant get it working.

Thank you all.


回答1:


If your definition of MyException

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

then you shouldn't need to return the Custom Exception just throw it.

then you can define

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

As I recall (and it's been a while) trying to return multiple objects from a web method can prove to be extremely troublesome




回答2:


If you really want to return multiple objects, then maybe you should create a "wrapper" object, e.g something like this:

'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

Then change your method to return an instance of that class, with either the property Order or Exception set to the respective value:

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


来源:https://stackoverflow.com/questions/7105772/asmx-asp-net-webservice-return-multiple-classes-wsdl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!