当WCF服务调用返回错误时,如何捕获/访问soapenv:Detail节点中的信息?
单独捕获FaultException不包括它我可以在服务跟踪日志中看到数据。
解决方案/解决方法:
Catch ex As FaultException
Dim detailsMsg As String = String.Empty
Dim mf As MessageFault = ex.CreateMessageFault
If mf.HasDetail Then
Dim ns As XNamespace = "http://url"
Dim detailedMessage As XElement = mf.GetDetail(Of XElement)()
Dim messageElement As XElement = detailedMessage.Descendants(ns + "Message").SingleOrDefault
If messageElement IsNot Nothing Then
detailsMsg = messageElement.Value
End If
End If
End Try
仍然无法接受:
Catch ex As FaultException(Of XElement)
本来不错......
答案 0 :(得分:1)
您可以捕获它,但您必须指定用于详细信息的类型而不是XElement
。
Catch ex As FaultException(Of MyFaultDetails)
如果您使用“添加网络参考”并且这是WCF服务,则应由visual studio自动生成此详细信息的类型。
然后您可以使用:
ex.Detail
通过属性访问详细信息。
修改:确保您的网络服务方法使用FaultContract
属性进行修饰:
<FaultContract(GetType(MyFaultDetails))>_