Quelle est la meilleure approche pour gérer les exceptions en service WCF?
J'ai un service WCF déployés sur deux ou plusieurs machines distantes et il y a un bureau en fonction de l'application qui est utilisé par le client pour accéder à tout service wcf.
Le service WCF est connecté à SQL server 2005 pour lire et écrire des données.
C'est un intranet dans lequel le client doit être sur le même domaine.
Maintenant, il peut y avoir des cas où le service wcf lève des exceptions:
- URL non valide
- Service WCF est en baisse
- SQL server 2005 n'est pas en cours d'exécution
- Client n'est pas sur le même domaine
- L'authentification échoue
- L'autorisation échoue
et de nombreuses autres exceptions.
Pour chaque exception que j'ai à accomplir une action ou mettre à jour une barre d'état, selon l'exception. Par exemple, si l'autorisation est refusée, j'ai pour inviter l'utilisateur à entrer leurs informations d'identification.
S'il vous plaît suggérer la meilleure approche de conception pour gérer cela.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez certainement attraper et de gérer toutes les exceptions qui se produisent sur votre classe de service et de les transformer en un FaultException ou FaultException exception.
De cette façon, vous n'aurez pas la "faute" (ou déchirure), le canal de communication entre votre client et le serveur.
Même meilleure approche serait de mettre en œuvre les
IErrorHandler
interface de classe de service qui fournit un moyen à l'échelle mondiale attraper toutes les exceptions, comme ils se produisent et fournissent un FaultException au lieu de cela, c'est du SAVON conforme.Vous pouvez même transformer votre
IErrorHandler
dans un configurable comportement qui peut être activée ou désactivée dans la configuration.Voir ces articles et billets de blog pour plus de détails:
[FaultContract(typeof(CustomFault))]
Personnellement, j'ai créer une base de la Faute de la classe qui a une Raison bien et je l'étends tous les défauts de cette classe. Lorsque je veux lancer la faute, je l'appelle:
Il est également intéressant de noter que j'ai la version de ma faute classes (y compris la commune de la Faute de la classe) avec tous mes autres services. C'est seulement un problème si le service de la gestion des versions est une source de préoccupation, bien que.
Voici la base de la Faute de la classe (j'ai enlevé la validation d'arguments pour des raisons de concision):
Vous pouvez concevoir spécifiques Faute de Données des Contrats pour chaque exception scénario dans votre service WCF, de sorte que vous pouvez gérer la faute/exception à côté client, respectivement.