2

当 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)

这会很好...

4

1 回答 1

1

您可以捕获它,但您必须指定用于详细信息的类型而不是XElement.

Catch ex As FaultException(Of MyFaultDetails) 

如果您使用“添加 Web 引用”并且这是 WCF 服务,则此详细信息的类型应该已由 Visual Studio 自动生成。

然后你可以使用:

ex.Detail

通过属性访问详细信息。

编辑:确保您的 Web 服务方法使用以下FaultContract属性进行修饰:

<FaultContract(GetType(MyFaultDetails))>_ 
于 2012-03-30T19:48:58.087 回答