我们正在为客户开发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类型,但我不能让它工作。
谢谢大家。
答案 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