2

WCF サービス呼び出しがエラーを返したときに、soopenv: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

プロパティを介して詳細にアクセスします。

編集:FaultContract Web サービス メソッドが次の属性で装飾されていることを確認してください。

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