Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Le service de routage est un intermédiaire SOAP générique qui agit en tant que routeur de messages. La fonctionnalité principale du service de routage est la possibilité d’acheminer les messages en fonction du contenu du message, ce qui permet à un message d’être transféré vers un point de terminaison client en fonction d’une valeur dans le message lui-même, dans l’en-tête ou le corps du message.
RoutingService est implémenté en tant que service Windows Communication Foundation (WCF) dans le namespace System.ServiceModel.Routing. Le service de routage expose un ou plusieurs points de terminaison de service qui reçoivent des messages, puis achemine chaque message vers un ou plusieurs points de terminaison clients en fonction du contenu du message. Le service fournit les fonctionnalités suivantes :
Routage basé sur le contenu
- Agrégation de services
- Contrôle de version du service
- Routage de priorité
- Configuration dynamique
Passerelle de protocole
Traitement SOAP
Gestion avancée des erreurs
Points de terminaison de sauvegarde
Bien qu’il soit possible de créer un service intermédiaire qui atteint un ou plusieurs de ces objectifs, une telle implémentation est souvent liée à un scénario ou une solution spécifique et ne peut pas être facilement appliquée aux nouvelles applications.
Le service de routage fournit un intermédiaire SOAP générique, configurable dynamiquement et compatible avec le service WCF et les modèles de canal et vous permet d’effectuer le routage basé sur le contenu des messages SOAP.
Remarque
Le service de routage ne prend actuellement pas en charge le routage des services REST WCF. Pour router les appels REST, envisagez d’utiliser System.Web.Routing ou Application Request Routing.
Routage basé sur le contenu
Le routage basé sur le contenu est la possibilité d’acheminer un message en fonction d’une ou plusieurs valeurs contenues dans le message. Le service de routage inspecte chaque message et l’achemine vers le point de terminaison de destination en fonction du contenu du message et de la logique de routage que vous créez. Le routage basé sur le contenu fournit la base de l’agrégation de service, du contrôle de version de service et du routage de priorité.
Pour implémenter le routage basé sur le contenu, le service de routage s’appuie sur MessageFilter des implémentations utilisées pour faire correspondre des valeurs spécifiques dans les messages à router. Si un MessageFilter correspond à un message, le message est acheminé vers le point de terminaison de destination associé au MessageFilter. Les filtres de messages sont regroupés en tables de filtre (FilterTableCollection) pour construire une logique de routage complexe. Par exemple, une table de filtres peut contenir cinq filtres de messages mutuellement exclusifs qui entraînent l’acheminement des messages vers un seul des cinq points de terminaison de destination.
Le service de routage vous permet de configurer la logique utilisée pour effectuer le routage basé sur le contenu, ainsi que de mettre à jour dynamiquement la logique de routage au moment de l’exécution.
Grâce au regroupement de filtres de messages dans des tables de filtres, la logique de routage peut être construite qui vous permet de gérer plusieurs scénarios de routage tels que :
- Agrégation de services
- Contrôle de version du service
- Routage de priorité
- Configuration dynamique
Pour plus d’informations sur les filtres de messages et les tables de filtre, consultez Présentation du routage et Filtres de messages.
Agrégation de services
En utilisant le routage basé sur le contenu, vous pouvez exposer un point de terminaison qui reçoit des messages d’applications clientes externes, puis router chaque message vers le point de terminaison interne approprié en fonction d’une valeur dans le message. Cela est utile pour offrir un point de terminaison spécifique pour une variété d’applications principales, ainsi que pour présenter un point de terminaison d’application aux clients tout en factorisant votre application en divers services.
Contrôle de version du service
Lors de la migration vers une nouvelle version de votre solution, vous devrez peut-être conserver l’ancienne version en parallèle pour servir les clients existants. Cela nécessite souvent que les clients se connectant à la version plus récente utilisent une adresse différente lors de la communication avec la solution. Le service de routage vous permet d’exposer un point de terminaison de service qui sert les deux versions de votre solution en acheminant les messages vers la solution appropriée en fonction des informations spécifiques à la version contenues dans le message. Pour obtenir un exemple de cette implémentation, consultez How To : Service Versioning.
Routage de priorité
Lorsque vous fournissez un service pour plusieurs clients, vous pouvez avoir un contrat de niveau de service (SLA) avec certains partenaires qui nécessitent que toutes les données de ces partenaires soient traitées séparément de celles d’autres clients. À l’aide d’un filtre qui recherche des informations spécifiques au client contenues dans le message, vous pouvez facilement router les messages de partenaires spécifiques vers un point de terminaison créé pour répondre à leurs exigences en matière de contrat SLA.
Configuration dynamique
Pour prendre en charge les systèmes stratégiques, où les messages doivent être traités sans interruption de service, il est essentiel de pouvoir modifier la configuration des composants au sein du système au moment de l’exécution. Pour prendre en charge ce besoin, le service de routage fournit une IExtension<T> implémentation, la RoutingExtension, qui permet la mise à jour dynamique de la configuration du service de routage à l'exécution.
Pour plus d’informations sur la configuration dynamique du service de routage, consultez Présentation du routage.
Passerelle de protocole
L’un des défis rencontrés dans les scénarios intermédiaires est que les points de terminaison internes peuvent avoir des exigences de transport ou de version SOAP différentes du point de terminaison sur lequel les messages sont reçus. Pour prendre en charge ce scénario, le service de routage peut établir des ponts entre les protocoles, y compris traiter le message SOAP vers les points de terminaison de destination représentés par MessageVersion. De cette façon, un protocole peut être utilisé pour la communication interne, tandis qu’un autre peut être utilisé pour la communication externe.
Pour prendre en charge le routage des messages entre les points de terminaison avec différents transports, le service de routage utilise des liaisons fournies par le système qui permettent au service de faire le lien entre des protocoles différents. Cela se produit automatiquement lorsque le point de terminaison du service exposé par le service de routage utilise un protocole différent de celui des points de terminaison client auxquels les messages sont envoyés.
Traitement SOAP
Une exigence de routage courante est la possibilité d’acheminer les messages entre les points de terminaison avec des exigences SOAP différentes. Pour prendre en charge cette exigence, le service de routage fournit un SoapProcessingBehavior qui crée automatiquement une nouvelle MessageVersion répondant aux exigences du point de terminaison de destination avant que le message ne soit routé vers celui-ci. Ce comportement crée également un nouveau MessageVersion pour tout message de réponse avant de le renvoyer à l'application client requérante, afin de s'assurer que la MessageVersion de la réponse correspond à celle de la requête d'origine.
Pour plus d’informations sur le traitement SOAP, consultez Présentation du routage.
Gestion des erreurs
Dans un système composé de services distribués qui s’appuient sur les communications réseau, il est important de s’assurer que les communications au sein de votre système sont résistantes aux défaillances réseau temporaires. Le service de routage implémente la gestion des erreurs qui vous permet de gérer de nombreux scénarios d’échec de communication susceptibles d’entraîner une panne de service.
Si le service de routage rencontre un CommunicationException lors de l'envoi d'un message, la gestion des erreurs aura lieu. Ces exceptions indiquent généralement qu’un problème a été rencontré lors de la tentative de communication avec le point de terminaison client défini, tel qu’un EndpointNotFoundException, ServerTooBusyExceptionou CommunicationObjectFaultedException. Le code de gestion des erreurs intercepte également et tente de réessayer d’envoyer lorsqu’une exception TimeoutException se produit, qui est une autre exception courante qui n’est pas dérivée de CommunicationException.
Pour plus d’informations sur la gestion des erreurs, consultez Présentation du routage.
Points d'accès de sauvegarde
Outre les points de terminaison clients de destination associés à chaque définition de filtre dans le tableau de filtres, vous pouvez également créer une liste de points de terminaison de sauvegarde vers lesquels le message sera acheminé en cas de défaillance de transmission. Si une erreur se produit et qu’une liste de sauvegarde est définie pour l’entrée de filtre, le service de routage tente d’envoyer le message au premier point de terminaison défini dans la liste. Si cette tentative de transmission échoue, le service essaie le point de terminaison suivant et continue ce processus jusqu’à ce que la tentative de transmission réussisse, retourne une erreur liée à la non-transmission ou tous les points de terminaison de la liste de sauvegarde ont renvoyé une erreur de transmission.
Pour plus d’informations sur les points de terminaison de sauvegarde, consultez Présentation du routage et Filtres de messages.
Diffusion en continu
Le service de routage peut diffuser des messages en continu si vous définissez la liaison pour permettre la diffusion en continu. Toutefois, il existe certaines conditions dans lesquelles les messages peuvent avoir besoin d’être mis en mémoire tampon :
- Multidiffusion (mémoire tampon pour créer des copies de messages supplémentaires).
- Basculement (mémoire tampon dans le cas où le message doit être envoyé à un système de secours).
- System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly est défini sur false (mettre en mémoire tampon pour présenter le MessageFilterTable avec un MessageBuffer afin que les filtres puissent inspecter le corps).
- Configuration dynamique.