Partage via


Contrats de routage

Les contrats de routage définissent les modèles de message que le service de routage peut traiter. Chaque contrat est sans type et permet au service de recevoir un message sans connaissance du schéma ou de l’action du message. Cela permet au service de routage de router les messages de manière générique sans configuration supplémentaire pour les spécificités des messages sous-jacents routés.

Contrats de routage

Étant donné que le service de routage accepte un objet de message WCF générique, la considération la plus importante lors de la sélection d’un contrat est la forme du canal qui sera utilisé lors de la communication avec les clients et les services. Lors du traitement des messages, le service de routage utilise des pompes de messages symétriques. En règle générale, la forme du contrat entrant doit correspondre à la forme du contrat sortant. Toutefois, il existe des cas où le répartiteur du modèle de service peut modifier les formes, par exemple lorsque le répartiteur convertit un canal duplex en canal de demande-réponse, ou supprime la prise en charge de session d’un canal lorsqu’il n’est pas nécessaire et n’est pas utilisé (c’est-à-dire, quand SessionMode.Allowed, convertissant un IInputSessionChannel en IInputChannel).

Pour prendre en charge ces pompes de messages, le service de routage fournit des contrats dans l’espace de nommage System.ServiceModel.Routing, à utiliser lors de la définition des points de terminaison de service par le service de routage. Ces contrats sont sans type, ce qui permet la réception d’un type de message ou d’une action, et permet au service de routage de gérer les messages sans connaissance du schéma de message spécifique. Pour plus d’informations sur les contrats utilisés par le service de routage, consultez Contrats de routage.

Les contrats fournis par le service de routage se trouvent dans l’espace System.ServiceModel.Routing de noms et sont décrits dans le tableau suivant.

Contrat Forme Forme de canal
ISimplexDatagramRouter SessionMode = SessionMode.Allowed

AsyncPattern = vrai

IsOneWay = vrai
IInputChannel -> IOutputChannel
ISimplexSessionRouter SessionMode = SessionMode.Required

AsyncPattern = true

IsOneWay = vrai
IInputSessionChannel -> IOutputSessionChannel
IRequestReplyRouter SessionMode = SessionMode.Autorisé

AsyncPattern = true
IReplyChannel -> IRequestChannel
IDuplexSessionRouter SessionMode=SessionMode.Required

CallbackContract=typeof(ISimplexSession)

AsyncPattern = true

IsOneWay = vrai

TransactionFlow(TransactionFlowOption.Allowed)
IDuplexSessionChannel -> IDuplexSessionChannel

Voir aussi