Bridging and Error Handling
Cet exemple illustre l'utilisation du service de routage Windows Communication Foundation (WCF) pour établir un pontage de communication entre un client et un service qui utilisent des liaisons différentes. Il montre également comment utiliser un service de sauvegarde pour les scénarios de basculement. Le service de routage est un composant WCF qui facilite l'inclusion d'un routeur basé sur le contenu dans votre application. Cet exemple adapte l'exemple WCF Calculator standard pour communiquer à l'aide du service de routage.
Remarque : |
---|
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\ErrorHandlingAndBridging
|
Détails de l'exemple
Dans cet exemple, le client Calculator est configuré pour envoyer des messages à un point de terminaison exposé par le routeur. Le service de routage (Routing Service) est configuré de façon à accepter tous les messages qui lui sont envoyés et les transférer à un point de terminaison qui correspond au service Calculator. Les points suivants décrivent la configuration du service Calculator principal, du service Calculator de sauvegarde et du client Calculator, ainsi que la façon dont la communication entre le client et le service s'effectue à l'aide du service de routage :
Le client Calculator est configuré pour utiliser BasicHttpBinding, alors que le service Calculator est configuré pour utiliser NetTcpBinding. Au besoin, le service de routage convertit automatiquement les messages avant de les envoyer au service Calculator et convertit également les réponses afin que le client Calculator puisse y accéder.
Le service de routage connaît l'existence de deux services Calculator : le service Calculator principal et le service Calculator de sauvegarde. Le service de routage essaie d'abord de communiquer avec le point de terminaison du service Calculator principal. Si cette tentative échoue en raison d'une défaillance du point de terminaison, le service de routage essaie de communiquer avec le point de terminaison du service Calculator de sauvegarde.
Les messages envoyés à partir du client sont donc reçus par le routeur et reroutés au véritable service Calculator. Si le point de terminaison du service Calculator subit une défaillance, le service de routage route le message vers le point de terminaison du service Calculator de sauvegarde. Les messages du service Calculator de sauvegarde sont renvoyés au routeur du service, qui à son tour les retransmet au client Calculator.
Remarque : |
---|
Plusieurs points de terminaison peuvent être définis dans une même liste de sauvegarde. Dans ce cas, si le point de terminaison du service de sauvegarde subit une défaillance, le service de routage essaie de se connecter au point de terminaison de sauvegarde suivant dans la liste, jusqu'à ce qu'une connexion puisse être établie. |
Pour utiliser cet exemple
À l'aide de Visual Studio 2010, ouvrez RouterBridgingAndErrorHandling.sln.
Appuyez sur F5 ou sur F6 dans Visual Studio.
Si vous souhaitez lancer automatiquement les projets nécessaires lorsque vous appuyez sur F5, cliquez avec le bouton droit sur la solution, sélectionnez Propriétés, puis, dans le nœud Projet de démarrage situé sous Propriétés communes, sélectionnez Plusieurs projets de démarrage et indiquez Démarrer pour tous les projets.
Si vous générez le projet avec F6, démarrez les applications suivantes :
Client Calculator (./CalculatorClient/bin/client.exe)
Service Calculator (./CalculatorService/bin/service.exe)
Service Routing (./RoutingService/bin/RoutingService.exe)
Dans le client Calculator, appuyez sur ENTRÉE pour démarrer le client.
Vous devez voir la sortie suivante :
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
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 App.config afin qu'il ne soit pas reconnu et supprimer les marques de commentaire de l'appel de méthode à ConfigureRouterViaCode()
. Quelle que soit la méthode employée, le comportement de routeur obtenu est le même.
Scénario
Cet exemple illustre le routeur du service agissant en tant que pont de protocole et gestionnaire d'erreurs. Dans ce scénario, aucun routage basé sur le contenu n'intervient ; le service de routage fait office de nœud de proxy transparent configuré pour passer les messages directement à un ensemble préconfiguré de points de terminaison de destination. Le service de routage assure aussi la gestion transparente des erreurs qui se produisent lorsqu'il tente d'effectuer des envois vers les points de terminaison avec lesquels il est configuré pour communiquer. En jouant le rôle de pont de protocole, le service de routage permet à l'utilisateur de définir un protocole pour la communication externe et un autre pour la communication interne.
Scénario réel
Contoso souhaite fournir un point de terminaison de service pouvant interagir avec le monde extérieur, tout en optimisant les performances en interne. Il expose donc ses services au monde via un point de terminaison utilisant BasicHttpBinding, et recourt en interne au service de routage pour établir un pont entre cette connexion et le point de terminaison NetTcpBinding qu'utilisent ses services. En outre, Contoso souhaite que son offre de services présente une tolérance aux pannes temporaires dans chacun de ses services de production. À cette fin, il virtualise plusieurs points de terminaison derrière le service de routeur en s'appuyant sur les fonctionnalités de gestion des erreurs pour basculer automatiquement vers les points de terminaison de sauvegarde en cas de nécessité.