Vue d'ensemble des sessions fiables

La messagerie fiable SOAP de Windows Communication Foundation (WCF) fournit une fiabilité de transfert de messages de bout en bout entre des points de terminaison SOAP. Elle permet cela sur des réseaux peu fiables en remédiant aux échecs de transport et aux échecs au niveau du message SOAP. Notamment, elle fournit une remise basée sur session, unique et ordonnée (facultativement) pour les messages envoyés via SOAP ou des intermédiaires de transport. La remise basée sur session fournit le regroupement de messages dans une session et permet l’ordonnancement facultatif des messages.

Cette rubrique décrit les sessions fiables, comment et quand les utiliser et comment les sécuriser.

Sessions fiables WCF

Les sessions fiables WCF sont une implémentation de la messagerie fiable SOAP, comme défini par le protocole WS-ReliableMessaging.

La messagerie fiable SOAP de WCF fournit une session fiable de bout en bout entre deux points de terminaison, indépendamment du nombre ou du type des intermédiaires qui séparent les points de terminaison de messagerie. Au rang de ces intermédiaires figurent notamment tous les transports qui n’utilisent pas le protocole SOAP (par exemple, les proxys HTTP) ou les intermédiaires qui utilisent SOAP (par exemple, les routeurs ou les ponts SOAP), nécessaires à la circulation des messages entre les points de terminaison. Un canal de session fiable prend en charge la communication interactive afin que les services connectés par ce canal s’exécutent concurremment et puissent échanger et traiter des messages dans des conditions de latence basse, autrement dit, dans des intervalles relativement courts. Ce couplage signifie que ces composants progressent ensemble ou échouent ensemble, donc ils ne sont pas isolés les uns des autres.

Une session fiable masque deux types d'échecs :

  • Échecs au niveau du message SOAP, incluant les messages perdus ou dupliqués et les messages qui arrivent dans un ordre différent de l'ordre dans lequel ils ont été envoyés.

  • Échecs de transport

Une session fiable implémente le protocole WS-ReliableMessaging et une fenêtre de transfert en mémoire pour masquer les échecs au niveau du message SOAP et rétablit des connexions en cas d'échecs de transport.

Une session fiable gère les messages SOAP de la même façon que TCP gère les paquets IP. Une connexion de socket TCP fournit un transfert unique et symétrique des paquets IP entre les nœuds. Le canal fiable fournit le même type de transfert fiable, mais il diffère de la fiabilité fournie par le socket TCP des façons suivantes :

  • La fiabilité est fournie au niveau du message SOAP, non pour un paquet d'octets arbitrairement dimensionné.

  • La fiabilité est fournie dans le cadre d’un transport neutre, pas seulement pour le transfert sur TCP.

  • La fiabilité n’est pas attachée à une session de transport particulière (par exemple, la session qu’une connexion TCP fournit) et peut utiliser simultanément ou séquentiellement des sessions de transport multiples sur la durée de vie de la session fiable.

  • La session fiable existe entre les points de terminaison SOAP de l'expéditeur et du récepteur, indépendamment du nombre de connexions de transport requis pour la connectivité entre eux. En résumé, la fiabilité TCP termine là où la connexion de transport s’arrête, alors qu’une session fiable fournit une fiabilité de bout en bout.

Sessions et liaisons fiables

Comme mentionné précédemment, une session fiable est neutre pour le transport. Par ailleurs, une session fiable peut être établie selon de nombreux modèles d’échange de messages, tels que la demande-réponse ou le duplex. La session fiable de WCF est par conséquent exposée comme une propriété d’un jeu de liaisons.

Utilisez une session fiable sur les points de terminaison qui utilisent :

  • Des liaisons standard de transport basées sur HTTP :

    • WsHttpBinding et expose des contrats demande-réponse ou unidirectionnels.

    • Lors de l’utilisation de la session fiable sur un contrat de service demande-réponse ou unidirectionnel simple.

    • WsDualHttpBinding et expose des contrats duplex, demande-réponse ou unidirectionnels.

    • WsFederationHttpBinding et expose des contrats demande-réponse ou unidirectionnels.

  • Des liaisons standard de transport basées sur TCP :

    • NetTcpBinding et expose des contrats duplex, demande-réponse ou unidirectionnels.

Utilisez une session fiable sur tout autre type de liaison en créant une liaison personnalisée, telle qu’une liaison HTTPS (pour plus d’informations à ce sujet, consultez Sessions fiables et sécurité) ou une liaison de canal nommée.

Une session fiable peut être empilée sur différents types de canaux sous-jacents et la forme du canal de session fiable résultante varie. Sur le client et sur le serveur, le type de canal de session fiable pris en charge dépend du type de canal sous-jacent qui est utilisé. Le tableau suivant répertorie les types de canaux de session pris en charge sur le client en fonction du type de canal sous-jacent.

Types de canaux de session fiable pris en charge† IRequestChannel IRequestSessionChannel IDuplexChannel IDuplexSessionChannel
IOutputSessionChannel Oui Oui Oui Oui
IRequestSessionChannel Oui Oui No Non
IDuplexSessionChannel Non Non Oui Oui

†Les types de canaux pris en charge sont les valeurs disponibles pour la valeur de paramètre TChannel générique passée dans la méthode BuildChannelFactory<TChannel>(BindingContext).

Le tableau suivant répertorie les types de canaux de session pris en charge sur le serveur en fonction du type de canal sous-jacent.

Types de canaux de session fiable pris en charge‡ IReplyChannel IReplySessionChannel IDuplexChannel IDuplexSessionChannel
IInputSessionChannel Oui Oui Oui Oui
IReplySessionChannel Oui Oui No Non
IDuplexSessionChannel Non Non Oui Oui

‡Les types de canaux pris en charge sont les valeurs disponibles pour la valeur de paramètre TChannel générique passée dans la méthode BuildChannelListener<TChannel>(BindingContext).

Sessions fiables et sécurité

La sécurisation d’une session fiable est importante pour garantir que les participants à la communication (service et client) sont authentifiés et que les messages échangés dans la session ne sont pas falsifiés. En outre, il est important de garantir l’intégrité de chaque session fiable. Une session fiable est sécurisée en la liant à un contexte de sécurité qui est représenté et géré par un canal de session de sécurité. Le canal de sécurité fournit une session de sécurité. Les jetons de sécurité échangés pendant l'établissement de la session sont ensuite utilisés pour sécuriser les messages dans la session fiable.

Lorsqu’une session fiable est sur TCP-S, la session TCP est liée à la session fiable. Par conséquent, la sécurité du transport garantit que la sécurité est également liée à la session fiable. Dans ce cas, le rétablissement de la connexion est désactivé.

La seule exception est l'utilisation du protocole HTTPS. La session SSL (Secure Sockets Layer) n’est pas liée à la session fiable. Cela constitue une menace parce que les sessions qui partagent un contexte de sécurité (la session SSL) ne sont pas protégées l’une par rapport à l’autre ; cela peut représenter ou non une véritable menace, selon l’application.

Utilisation de sessions fiables

Pour utiliser les sessions fiables WCF, créez un point de terminaison avec une liaison prenant en charge une session fiable. Utilisez l’une des liaisons fournies par le système que WCF fournit avec la session fiable activée, ou créez votre propre liaison personnalisée.

Les liaisons définies par le système qui prennent en charge et activent une session fiable par défaut incluent :

Les liaisons fournies par le système qui prennent en charge une session fiable en option mais qui n’activent pas de session fiable par défaut incluent :

Pour obtenir un exemple de création d’une liaison personnalisée, consultez Guide pratique pour créer une liaison de session fiable personnalisée à l’aide de HTTPS.

Pour une discussion sur les liaisons WCF qui prennent en charge les sessions fiables, consultez Liaisons fournies par le système.

Quand utiliser des sessions fiables

Il est important de comprendre quand utiliser des sessions fiables dans votre application. WCF prend en charge des sessions fiables entre les points de terminaison qui sont actifs en même temps. Si votre application requiert que l’un des points de terminaison soit indisponible pour une certaine durée, utilisez des files d’attente pour assurer la fiabilité.

Si le scénario nécessite deux points de terminaison connectés via TCP, TCP peut être suffisant pour fournir des échanges de messages fiables. Il n’est toutefois pas nécessaire d’utiliser une session fiable, car TCP garantit que les paquets arrivent dans l’ordre et une seule fois.

Si votre scénario présente l’une des caractéristiques suivantes, vous devez sérieusement envisager d’utiliser une session fiable.

  • Intermédiaires SOAP, tels que les routeurs SOAP

  • Intermédiaires proxy ou ponts de transport

  • Connectivité intermittente

  • Sessions sur HTTP

Voir aussi