2010-01-25 5 views
6

J'accède à un service Web SOAP 1.1 et renvoie une erreur. Le service Web ne définit pas de contrat de défaillance dans le WSDL pour autant que je puisse voir. Mon client WCF mappe l'erreur à une exception FaultException (plutôt qu'une exception Fault <T>). Tout cela a du sens. Le problème est que le service renvoie des informations de diagnostic utiles dans l'élément detail de la faute, auquel j'aimerais accéder afin de pouvoir le sauvegarder dans un journal de suivi. Il semble que FaultException ne fournisse aucun accès à l'élément detail, sans doute parce que sans contrat de faute, il ne sait pas ce qu'il contient.Comment accéder au détail de défaut SOAP 1.1 à partir du client WCF (contrat sans erreur)

Mais je n'ai pas besoin de désérialiser le détail XML - juste le XML brut comme une chaîne fera l'affaire à des fins de diagnostic.

Existe-t-il un moyen d'accéder au détail XML à partir d'un client WCF, dans ce scénario?

Répondre

11

Comme détaillé ici: http://www.theruntime.com/blogs/jacob/archive/2008/01/28/getting-at-the-details.aspx

vous pouvez utiliser cette solution de contournement pour obtenir les détails:

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

Exactement ce que je cherchais. Merci! – Andy

+1

Je vous donnerais +10 si c'était possible .. Je me suis juste * souvenu * c'était quelque part, mais je ne pouvais pas trouver cela même sur MSDN API dump. Merci beaucoup! – quetzalcoatl

+0

Génial, merci! Vous pouvez ensuite parcourir les données en faisant: while (reader.Read()) {} et accéder aux données à l'intérieur de la boucle via reader.Name et reader.Value –

Questions connexes