2010-01-25 33 views
6

我正在訪問SOAP 1.1 Web服務,並且它返回一個錯誤。就我所見,Web服務沒有在WSDL中定義任何錯誤協定。我的WCF客戶端將故障映射到FaultException(而不是FaultException <T>)。這一切都有道理。問題在於服務正在返回故障的詳細元素中的一些有用的診斷信息,我想訪問它以便將其轉儲到跟蹤日誌中。看來FaultException不提供任何對detail元素的訪問,大概是因爲沒有錯誤契約它不知道里面有什麼。如何從WCF客戶端訪問SOAP 1.1錯誤詳細信息(無錯誤合同)

但我並不需要反序列化細節XML - 只是原始的XML作爲一個字符串將用於診斷目的做精。

有沒有什麼辦法讓從WCF客戶端訪問細節XML,在這種情況下?

回答

11

如這裏詳述: http://www.theruntime.com/blogs/jacob/archive/2008/01/28/getting-at-the-details.aspx

您可以使用此解決方案,以獲得詳細信息:

} catch (FaultException soapEx) 
{  
    MessageFault mf = soapEx.CreateMessageFault();  
    if (mf.HasDetail) 
    {  
     XmlDictionaryReader reader = mf.GetReaderAtDetailContents();  
     ...  
    }  
} 
+1

正是我一直在尋找。謝謝! – Andy 2010-01-25 19:55:19

+1

如果可能的話,我會給你+10 ..我只是*重新編號*它在某個地方,但我甚至無法在MSDN API轉儲中找到它。非常感謝! – quetzalcoatl 2012-05-30 09:53:43

+0

真棒,謝謝! 然後,您可以通過執行以下操作遍歷數據:while(reader.Read()){} 並通過reader.Name和reader.Value訪問循環內的數據 – 2013-02-21 07:45:38