asmx asp.net webservice返回多个类wsdl

时间:2011-08-18 10:12:48

标签: asp.net vb.net wsdl asmx

我们正在为客户开发Web服务。我们不打算抛出SoapExceptions,因此我们捕获每个异常服务器端,并返回一个自定义的Exception类。

Public Class Order
...
End Class

Public Class MyException
...
End Class

然后在我的webservice中有一个函数(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

现在的问题是,因为我的webmethod正在返回类型[Object]。生成的wdsl不包含订单或异常。

我可以将[Object]更改为[Order]或[MyException],但在wsdl中只生成其中一个。

那么有人知道我应该如何处理这个问题吗?我想在我的wsdl中同时使用MyException类型和Order类型,但我不能让它工作。

谢谢大家。

2 个答案:

答案 0 :(得分:2)

如果您定义了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

我记得(并且已经有一段时间了)尝试从Web方法返回多个对象可能会非常麻烦

答案 1 :(得分:1)

如果你真的想要返回多个对象,那么也许你应该创建一个“包装器”对象,例如:

'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