2012-03-29 64 views
1

當WCF服務調用返回錯誤時,如何捕獲/訪問soapenv中的信息:Detail節點?在WCF服務中訪問ServiceModel.FaultException細節

單獨捕獲FaultException不包含它bu我可以看到服務跟蹤日誌中的數據。

解決方案/解決方法:

 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

你可以捕捉它,但你必須指定用於細節的類型而不是XElement

Catch ex As FaultException(Of MyFaultDetails) 

類型爲這個細節應該已經自動由Visual Studio如果使用「添加Web引用」生成的,這是一個WCF服務。

然後,您可以使用:

ex.Detail 

通過屬性訪問的細節。

編輯:確保您的Web服務方法與FaultContract屬性來修飾:

<FaultContract(GetType(MyFaultDetails))>_ 
+0

這是我第一次嘗試,但它不會去追,我可以看到對象的XML表示回覆但不能使用wsdl生成的對象來捕獲細節。命名空間對此有什麼影響?它與文檔的其餘部分不同。 – baileyswalk 2012-04-04 15:41:25

+0

是否將FaultContract屬性放在Web服務方法中? (檢查我的編輯) – aKzenT 2012-04-04 21:28:46

+0

服務是外部的我只參考它,我可以檢查這個客戶端? – baileyswalk 2012-04-13 11:16:15