Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les transports orientés flux, tels que TCP et Canaux nommés, fonctionnent sur un flux continu d'octets entre le client et le serveur. Ce flux est réalisé par un Stream objet. Dans une mise à niveau de flux, le client souhaite ajouter une couche de protocole facultative à la pile de canaux et demande à l’autre extrémité du canal de communication de le faire. La mise à niveau de flux consiste à remplacer l’objet d’origine Stream par un objet mis à niveau.
Par exemple, vous pouvez créer un flux de compression directement au-dessus du flux de transport. Dans ce cas, le transport Stream d’origine est remplacé par un transport qui encapsule la compression Stream autour de celle d’origine.
Vous pouvez appliquer plusieurs améliorations de flux, chacune encapsulant la précédente.
Fonctionnement des mises à jour de flux de données
Il y a quatre composants au processus de mise à niveau du flux de données.
Un initiateur de flux de mise à niveau commence le processus : au moment de l’exécution, il peut lancer une demande à l’autre extrémité de sa connexion pour mettre à niveau la couche de transport du canal.
Un accepteur de flux de mise à niveau exécute la mise à niveau : au moment de l’exécution, il reçoit la demande de mise à niveau de l’autre ordinateur et, si possible, accepte la mise à niveau.
Un fournisseur de mise à jour crée l'initiateur sur le client et l'accepteur sur le serveur.
Une mise à niveau de flux élément de liaison est ajoutée aux liaisons sur le service et le client, créant ainsi le fournisseur à l'exécution.
Notez que, dans le cas de plusieurs mises à niveau, l’initiateur et l’accepteur encapsulent des ordinateurs d’état pour appliquer les transitions de mise à niveau valides pour chaque initiation.
Comment implémenter une mise à niveau de flux
Windows Communication Foundation (WCF) fournit quatre abstract classes que vous pouvez implémenter :
Pour implémenter une mise à niveau de flux personnalisée, procédez comme suit. Cette procédure implémente un processus de mise à niveau de flux minimal sur les ordinateurs clients et serveurs.
Créez une classe qui implémente StreamUpgradeInitiator.
Remplacez la méthode InitiateUpgrade pour recevoir le flux à mettre à niveau et renvoyez le flux mis à niveau. Cette méthode fonctionne de manière synchrone ; il existe des méthodes analogues pour lancer la mise à niveau de manière asynchrone.
Remplacez la GetNextUpgrade méthode pour vérifier les mises à niveau supplémentaires.
Créez une classe qui implémente StreamUpgradeAcceptor.
Remplacez la méthode AcceptUpgrade pour recevoir le flux à mettre à niveau et renvoyez le flux mis à niveau. Cette méthode fonctionne de manière synchrone ; il existe des méthodes analogues pour accepter la mise à niveau de manière asynchrone.
Remplacez la CanUpgrade méthode pour déterminer si la mise à niveau demandée est prise en charge par cet accepteur de mise à niveau à ce stade dans le processus de mise à niveau.
Créez une classe que implémente StreamUpgradeProvider. Substituez les méthodes CreateUpgradeAcceptor et CreateUpgradeInitiator pour retourner des instances de l'accepteur et de l'initiateur définies aux étapes 2 et 1.
Créez une classe qui implémente StreamUpgradeBindingElement.
Remplacez la BuildClientStreamUpgradeProvider méthode sur le client et la BuildServerStreamUpgradeProvider méthode sur le service.
Substituez la méthode BuildChannelFactory sur le client et la méthode BuildChannelListener sur le service pour ajouter l'élément de liaison de mise à niveau à BindingParameters.
Ajoutez le nouvel élément de liaison de mise à niveau de flux aux liaisons sur les ordinateurs serveur et client.
Mises à niveau de sécurité
L’ajout d’une mise à niveau de sécurité est une version spécialisée du processus de mise à niveau de flux général.
WCF fournit déjà deux éléments de liaison pour la mise à niveau de la sécurité des flux. La configuration de la sécurité au niveau du transport est encapsulée par WindowsStreamSecurityBindingElement et SslStreamSecurityBindingElement, qui peuvent être configurés et ajoutés à une liaison personnalisée. Ces éléments de liaison étendent la classe StreamUpgradeBindingElement qui génère les fournisseurs de mise à niveau de flux client et serveur. Pour ces deux cas, ces éléments de liaison possèdent des méthodes qui créent les classes spécialisées de fournisseurs pour la mise à niveau du flux de sécurité, qui ne sont pas public, donc il vous suffit d’ajouter l’élément de liaison à la liaison.
**
Pour les scénarios de sécurité non satisfaits par les deux éléments de liaison ci-dessus, trois classes liées à la sécurité abstract sont dérivées des classes de base de l’initiateur, de l’accepteur et du fournisseur.
Le processus d’implémentation d’une mise à niveau de flux de sécurité est le même que précédemment, la différence étant que vous devriez dériver de ces trois classes. Remplacez les propriétés supplémentaires de ces classes pour fournir des informations de sécurité au runtime.
Mises à niveau multiples
Pour créer des demandes de mise à niveau supplémentaires, répétez le processus ci-dessus : créez des extensions supplémentaires de StreamUpgradeProvider et des éléments de liaison. Ajoutez les éléments de liaison à la liaison. Les éléments de liaison supplémentaires sont traités séquentiellement, en commençant par le premier élément de liaison ajouté à la liaison. Dans BuildChannelFactory et BuildChannelListener chaque fournisseur de mise à niveau peut déterminer comment venir s'ajouter à tout paramètre de liaison de mise à niveau préexistant. Il doit ensuite remplacer le paramètre de liaison de mise à niveau existant par un nouveau paramètre de liaison de mise à niveau composite.
Alternativement, un fournisseur de mises à niveau peut prendre en charge plusieurs mises à niveau. Par exemple, vous pouvez implémenter un fournisseur de mise à niveau de flux personnalisé qui prend en charge la sécurité et la compression. Effectuez les étapes suivantes :
Sous-classe StreamSecurityUpgradeProvider pour écrire la classe de fournisseur qui crée l’initiateur et l’accepteur.
Sous-classez StreamSecurityUpgradeInitiator en veillant à remplacer la méthode GetNextUpgrade pour retourner les types de contenu relatifs au flux de compression et au flux sécurisé dans l'ordre.
Sous-classez StreamSecurityUpgradeAcceptor qui reconnaît les types de contenu personnalisés dans sa méthode CanUpgrade.
Le flux sera mis à niveau après chaque appel vers GetNextUpgrade et CanUpgrade.