Advanced Error Handling
Cet exemple illustre le service de routage Windows Communication Foundation (WCF). Le service de routage est un composant WCF qui facilite l'inclusion d'un routeur basé sur le contenu dans votre application. Cet exemple montre comment le service de routage récupère intelligemment suite à des erreurs, en utilisant des transactions et d'autres concepts de messagerie plus complexes, comme la multidiffusion.
![]() |
---|
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.
<LecteurInstall>:\WF_WCF_Samples
Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.
<LecteurInstall>:\WF_WCF_Samples\WCF\Basic\RoutingServices\AdvancedErrorHandling
|
Détails de l'exemple
Dans cet exemple, le service de routage est configuré de façon à lire un message d'une file d'attente MSMQ et à envoyer ce message en multidiffusion à deux listes de files d'attente. Une liste est utilisée pour les files d'attente de service et une autre est utilisée pour les files d'attente d'enregistrement.
Étant donné que, par défaut, la liaison MSMQ que doit utiliser le service de routage prend en charge l'utilisation de transactions, le service de routage vérifie que le message est transactionnel et qu'il est reçu par au moins une file d'attente de chaque liste avant de signaler à la file d'attente à trafic entrant (InQ
) que le message a été routé avec succès. Par conséquent, s'il arrive que les deux files d'attente de service ou les deux files d'attente d'enregistrement soient indisponibles, le service de routage signale que le message n'a pas pu être routé et la file d'attente à trafic entrant doit entreprendre une action. Cette action consiste à déplacer le message vers la file d'attente système de lettres mortes.
Pour utiliser cet exemple
-
Remarque :
Installez MSMQ avant d'exécuter cet exemple. Si MSMQ n'est pas installé, un message d'exception est retourné lors de l'exécution de l'exemple. Les instructions d'installation de MSMQ se trouvent à la page Installation de Message Queuing (MSMQ). À l'aide de Visual Studio 2010, ouvrez AdvancedErrorHandling.sln.
Appuyez sur F5 ou F6 dans Visual Studio.
- Si vous générez l'application avec F6, vous devez démarrer l'application située dans ./RoutingService/bin/debug/RoutingService.exe.
Dans la fenêtre de console, appuyez sur ENTRÉE pour arrêter le client.
Le client retourne différentes statistiques sur les files d'attente dans chaque cas.
Voici la sortie retournée pour le cas 1 (aucun échec).
The inbound queue has 0 messages.
The primary service queue has 1 messages.
The backup service queue has 0 messages.
The primary logging queue has 1 messages.
The backup logging queue has 0 messages.
Press <Enter> to continueVoici la sortie retournée pour le cas 3 (échecs des files d'attente du service principal et d'enregistrement).
The inbound queue has 0 messages.
The primary service queue does not exist.
The backup service queue has 1 messages.
The primary logging queue does not exist.
The backup logging queue has 1 messages.
Press <ENTER> to continue.Voici la sortie retournée pour le cas 4 (échecs de la file d'attente du service principal et des files d'attente d'enregistrement principale et secondaire).
The inbound queue has 0 messages.
The primary service queue does not exist.
The backup service queue has 0 messages.
The primary logging queue does not exist.
The backup logging queue does not exist.
The System Dead Letter queue has 1 messages.
Press <ENTER> to Quit.Voici la sortie retournée pour le cas 2 (échec de la file d'attente du service principal).
The inbound queue has 0 messages.
The primary service queue does not exist.
The backup service queue has 1 messages.
The primary logging queue has 1 messages.
The backup logging queue has 0 messages.
Press <ENTER> to continue.
Configurable au moyen d'un code ou d'un fichier App.config
L'exemple est fourni en étant configuré de façon à utiliser un fichier App.config pour définir le comportement du routeur. Vous pouvez également renommer le fichier RoutingService\App.config afin qu'il ne soit pas reconnu et remplacer la valeur du champ configDriven
dans RoutingService\Program.cs par false pour utiliser la configuration définie dans le code. Quelle que soit la méthode employée, le comportement de routeur obtenu est le même.
Scénario
Cet exemple montre que le service de routage peut gérer des fonctions de messagerie avancées, telles que les transactions et le contexte de réception, et qu'il peut utiliser ces fonctions pour gérer correctement des scénarios d'erreurs.
Scénario réel
Contoso souhaite utiliser des réceptions transactionnelles via le service de routage pour faire en sorte que tous les services concernés reçoivent les informations même dans des conditions d'erreur. La société souhaite en outre que les erreurs soient gérées correctement et automatiquement, et que les échecs soient signalés en cas de non remise de messages malgré l'utilisation d'une logique de gestion des erreurs. À cette fin, elle configure le service de routage de sorte qu'il bascule vers des points de terminaison spécifiques comme prévu et qu'il gère les situations d'erreur, ce qui comprend la création, l'achèvement, ainsi que la restauration/l'abandon de transactions/contextes de réception selon les besoins.