WCF Stratégies de gestion des exceptions
Nous développons un proxy WCF qui servira de moyen de communication pour certains ordinateurs de poche fonctionnant notre client personnalisé de l'application. Je suis curieux de ce que la gestion des erreurs de stratégies de gens utilisent que je préfère ne pas envelopper CHAQUE proxy appel de try/catch.
Quand je développe ASP .NET je n'ai pas attraper la majorité des exceptions, je le levier Application_Error Mondiale asax qui peuvent alors se connecter à l'exception, envoyer un email, et rediriger l'utilisateur vers un message d'erreur personnalisé de la page de destination. Ce que je recherche dans WCF est semblable à cela, sauf que ça me permettrait de passer un général faultreason pour le client à partir d'un emplacement central.
Fondamentalement, je suis curieux de voir comment les gens de centraliser leur gestion des exceptions dans WCF apps.
Grâce
- Question importante: Êtes-vous à l'aide personnalisée défauts de l'erreur / contrats?
Vous devez vous connecter pour publier un commentaire.
Vous pourriez trouver la IErrorHandler interface utile ici. Nous avons été à l'aide de ce à faire à peu près ce que vous mentionnez centralisé enregistrement d'exception et de fournir généralisé faute raisons, sans avoir à litière le code avec de nombreux try/captures d'essayer et de traiter le problème localement.
Voici donc ce que j'ai fait. Nous avons quelques personnalisé exceptions dans notre application, tels que BusinessRuleException et ProcessException, WCF prend en charge à la fois FaultException et
FaultException<T>
.Pratique générale semble être que vous avez toujours jeter FaultException pour le client dans le cas d'une erreur d'ordre général ou d'une erreur que vous ne voulez pas afficher exactement ce qui s'est passé. Dans d'autres cas, vous pouvez passer
FaultException<T>
où T est une classe avec des informations sur l'exception.J'ai créé ce concept de Violations dans l'application, ce qui en gros veut dire que toute exception personnalisée avaient une propriété contenant le correspondant de la Violation de l'instance. Cette instance a été ensuite transmis au client ce qui permet au client de reconnaître quand une erreur récupérable avait eu lieu.
Cela a résolu une partie du problème, mais j'en voulais encore un général attraper tout ce qui me permettrait de centeralize de journalisation. J'ai trouvé ceci par l'aide de la IErrorHandle interface et l'ajout de ma propre gestionnaire d'erreur pour la WCF. Voici le code:
À l'aide de cette méthode, je peux convertir l'exception de ce que c'est quelque chose qui peut être facilement affiché sur le client alors que dans le même temps, l'enregistrement de l'exception véritable pour le personnel informatique à voir. Jusqu'à présent, cette approche fonctionne très bien et suit la même structure que les autres modules de l'application.
Nous utilisons l'Exception de la Manipulation bloc d'Application et d'un bouclier, la plupart des défauts des clients, afin d'éviter la divulgation d'informations sensibles, ce l'article pourrait être un bon point de départ pour vous, en tant que "bonnes pratiques" - vous devez utiliser ce qui convient à votre domaine.