2009-07-22 4 views
0

J'utilise le Enterprise Library Validation Application Block pour mon service WCF. Tout va bien, et les consommateurs .Net peuvent attraper l'exception FaultException<ValidationFault> pour obtenir une collection d'erreurs d'affaires lisible par l'homme. Cependant, il ne semble pas aussi bien pour les consommateurs non-Net, en particulier ceux qui vont regarder le message SOAP brut. Le texte SOAP Reason est toujours "Le créateur de cette erreur n'a pas spécifié de raison" Ceci n'est pas très utile car est une raison, elle est spécifiée sous l'élément <Detail>, comme indiqué dans l'exemple Message d'erreur au dessous de.WCF EntLib Validation - Changer le défaut par défaut SOAP Raison text

Est-il possible de changer le texte « Le créateur de cette faute n'a pas précisé la raison. » quelque chose de plus utile comme « Voir ValidationFault Détails »?

<s:Body> 
    <s:Fault> 
     <s:Code> 
     <s:Value>s:Sender</s:Value> 
     </s:Code> 
     <s:Reason> 
     <s:Text xml:lang="en-GB">The creator of this fault did not specify a Reason.</s:Text> 
     </s:Reason> 
     <s:Detail> 
     <ValidationFault xmlns="http://www.microsoft.com/practices/EnterpriseLibrary/2007/01/wcf/validation" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <Details xmlns:b="http://schemas.datacontract.org/2004/07/Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF"> 
       <b:ValidationDetail> 
        <b:Key i:nil="true"/> 
        <b:Message>Value Validator</b:Message> 
        <b:Tag>request</b:Tag> 
       </b:ValidationDetail> 
      </Details> 
     </ValidationFault> 
     </s:Detail> 
    </s:Fault> 
</s:Body> 
+0

J'ai le même problème. Je pense qu'il n'y a aucun moyen de le faire en utilisant le comportement de validation de la bibliothèque d'entreprise pour WCF. – softveda

+0

ouais, j'ai enquêté il y a un moment avant les jours de StackOverflow et c'était la conclusion à laquelle je suis arrivé, mais j'ai pensé que je posterais ici pour vérifier! –

Répondre

3

Eh bien, il semble que les gens ne pensaient pas EntLib de celui-ci. J'ai noté où la modification dans le code EntLib doit être et a soulevé un issue at their CodePlex site. Je suppose que cela pourrait également être fait par n'importe qui dans le cadre du projet EntLibContrib, mais ils semblent toujours sur Enterprise Library 3.1, alors que j'utilise 4.1.

Je suppose que si quelqu'un est désespéré, la solution serait de télécharger le code source EntLib, et de modifier la méthode BeforeCall dans la classe ValidationParameterInspector (dans l'espace de noms Microsoft.Practices.EnterpriseLibrary.Validation.Integration.WCF). C'est ici que le FaultException est créé. Une surcharge de ce constructeur peut spécifier le FaultReason.

+1

À droite, et c'est aussi là que vous devriez tirer le 'FaultReason' de la configuration. –

0

Comment votre service WCF génère-t-il ces erreurs? Lorsque vous regardez la classe FaultException dans WCF, il existe de nombreuses façons de construire l'un de ceux-ci - y compris certains constructors qui vous permettent de spécifier un FaultReason pour l'erreur SOAP.

Marc

+0

Oui, mais la validation EntLib est en cours avant le code d'implémentation de mon service. Le service peut gérer les erreurs qui se produisent après que la validation a eu lieu et les inclure dans les fautes SOAP, mais la validation se produit légèrement avant tout cela. –

+0

Toutefois, dans ce cas, la exception FaultException est créée par la bibliothèque d'entreprise et non explicitement par le code utilisateur. – softveda

+1

Ensuite, vous voudrez peut-être personnaliser le code de la bibliothèque d'entreprise (et le redonner). Je vous recommande de récupérer la raison d'une entrée de configuration. –

Questions connexes