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