访问WCF服务中的ServiceModel.FaultException详细信息

时间:2012-03-29 21:45:17

标签: vb.net wcf soap service faultexception

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

本来不错......

1 个答案:

答案 0 :(得分:1)

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

Catch ex As FaultException(Of MyFaultDetails) 

如果您使用“添加网络参考”并且这是WCF服务,则应由visual studio自动生成此详细信息的类型。

然后您可以使用:

ex.Detail

通过属性访问详细信息。

修改:确保您的网络服务方法使用FaultContract属性进行修饰:

<FaultContract(GetType(MyFaultDetails))>_