J'ai un service WCF configuré pour utiliser la validation UserName personnalisée via la méthode Validate() remplacée de la classe System.IdentityModel.Selectors.UserNamePasswordValidator.Authentification WCF UserName et contrats d'erreur
Toutes les méthodes du contrat ont été décorées avec FaultContractAttribute pour spécifier qu'une erreur SOAP personnalisée est renvoyée. Lorsque vous lancez FaultException <T>, où T est le type spécifié dans FaultContractAttribute, tout se comporte comme prévu et j'obtiens le défaut personnalisé dans le XML de réponse.
Cependant, si je tente de jeter FaultException <T> dans la méthode surchargée Valider() de la classe d'authentification nom d'utilisateur, je reçois une erreur SOAP générique avec la raison suivante:
« Le créateur de cette faute ne ne spécifie pas de raison. "
Cependant, si je change le code pour lancer la faute générale SOAP comme dans:
throw new FaultException("Authentication failed.");
j'obtenir au moins "Echec de l'authentification." dans l'élément raison.
Mes questions sont les suivantes:
- Pourquoi ne sont pas les FaultException <T> exceptions traitées de la même si elles sont jetées dans la validation() car ils sont dans la mise en œuvre du service?
- Est-il possible de faire en sorte que les exceptions levées dans la méthode Validate() soient conformes au FaultContractAttribute spécifié dans les méthodes de contrat?
Toute aide grandement appréciée. Ma propre supposition est que l'authentification vient avant que le message est associé à une méthode du contrat, et par conséquent, n'est pas associé à FaultContractAttribute, mais tout article le confirmant et donnant une solution de contournement serait très utile.
Tali
Merci d'envoyer cette question. Des solutions? Je suis toujours à la recherche d'une réponse en mars 2013. –