2010-01-25 9 views
6

Ich greife auf einen SOAP 1.1-Webservice zu und er gibt einen Fehler zurück. Der Webservice definiert keinen Fehlervertrag in der WSDL, soweit ich das sehe. Mein WCF-Client ordnet den Fehler einer FaultException zu (anstatt einer FaultException <T>). Das macht alles Sinn. Das Problem besteht darin, dass der Dienst einige nützliche Diagnoseinformationen im Detailelement des Fehlers zurückgibt, auf die ich zugreifen möchte, um sie in einem Ablaufverfolgungsprotokoll ablegen zu können. Scheinbar bietet FaultException keinen Zugriff auf das Detailelement, vermutlich weil es ohne einen Fehlervertrag nicht weiß, was drin ist.Zugriff auf SOAP 1.1-Fehlerdetails vom WCF-Client (kein Fehlervertrag)

Aber ich muss das Detail-XML nicht deserialisieren - nur das rohe XML als String wird für Diagnosezwecke gut funktionieren.

Gibt es in diesem Szenario eine Möglichkeit, Zugriff auf das XML-Detail von einem WCF-Client zu erhalten?

Antwort

11

Wie hier beschrieben: http://www.theruntime.com/blogs/jacob/archive/2008/01/28/getting-at-the-details.aspx

Sie diese Abhilfe die Details zu erhalten, verwenden können:

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

Genau das, was ich suchte. Vielen Dank! – Andy

+1

Ich würde Ihnen +10 geben, wenn es möglich wäre .. Ich erinnerte mich nur * es war irgendwo, aber ich konnte nicht finden, dass sogar auf MSDN API dump. Danke vielmals! – quetzalcoatl

+0

Super, danke! Sie können dann Daten durchlaufen, indem Sie: while (reader.Read()) {} und greifen Sie auf die Daten innerhalb der Schleife durch reader.Name und reader.Value –

Verwandte Themen