Partager via


WSStreamedHttpBinding

Cet exemple montre comment créer une liaison conçue pour prendre en charge des scénarios de diffusion en continu lorsque le transport HTTP est utilisé.

ms751520.note(fr-fr,VS.90).gifRemarque :
La procédure d'installation ainsi que les instructions de génération relatives à cet exemple figurent à la fin de cette rubrique.

Les étapes de la création et de la configuration d'une nouvelle liaison standard sont les suivantes.

  1. Créez une liaison standard
    Les liaisons standard dans Windows Communication Foundation (WCF) telles que basicHttpBinding et netTcpBinding configurent les transports sous-jacents et la pile de canaux pour des besoins spécifiques. Dans cet exemple, WSStreamedHttpBinding configure la pile de canaux pour prendre en charge la diffusion en continu. Par défaut, WS-Security et messagerie fiable ne sont pas ajoutés à la pile de canaux car ces deux fonctionnalités ne sont pas prises en charge par la diffusion en continu. La nouvelle liaison est implémentée dans la classe WSStreamedHttpBinding qui dérive de Binding. WSStreamedHttpBinding contient les éléments de liaison suivants : HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement et TextMessageEncodingBindingElement. La classe fournit une méthode CreateBindingElements() permettant de configurer la pile de liaison résultante, tel qu'indiqué dans l'exemple de code suivant.

    public override BindingElementCollection CreateBindingElements()
    {
         // return collection of BindingElements
         BindingElementCollection bindingElements = new BindingElementCollection();
    
        // the order of binding elements within the collection is important: layered channels are applied in the order included, followed by
        // the message encoder, and finally the transport at the end
        if (flowTransactions)
        {
            bindingElements.Add(transactionFlow);
        }
        bindingElements.Add(textEncoding);
    
        // add transport (http or https)
        bindingElements.Add(transport);
        return bindingElements.Clone();
    }
    
  2. Ajoutez la prise en charge de la configuration
    Pour exposer le transport via la configuration, l'exemple implémente deux classes : WSStreamedHttpBindingConfigurationElement et WSStreamedHttpBindingSection. La classe WSStreamedHttpBindingSection est un StandardBindingCollectionElement qui expose WSStreamedHttpBinding au système de configuration WCF. Le bloc de l'implémentation est délégué à WSStreamedHttpBindingConfigurationElement, qui dérive de StandardBindingElement. La classe WSStreamedHttpBindingConfigurationElement a des propriétés qui correspondent à celles de WSStreamedHttpBinding, et des fonctions pour mapper chaque élément de configuration à une liaison.
    Pour enregistrer le gestionnaire avec le système de configuration, ajoutez la section suivante au fichier de configuration du service.

    <configuration>
      <system.serviceModel>
        <extensions>
          <bindingExtensions>
            <add name="wsStreamedHttpBinding" type="Microsoft.ServiceModel.Samples.WSStreamedHttpBindingCollectionElement, WSStreamedHttpBinding, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
          </bindingExtensions>
        </extensions>
      </system.serviceModel>
    </configuration>
    

    Il pourra ensuite être référencé à partir de la section de configuration serviceModel.

    <configuration>
      <system.serviceModel>
        <client>
          <endpoint
                    address="https://localhost/servicemodelsamples/service.svc"
                    bindingConfiguration="Binding"
                    binding="wsStreamedHttpBinding"
                    contract="Microsoft.ServiceModel.Samples.IStreamedEchoService"/>
        </client>
      </system.serviceModel>
    </configuration>
    

Pour configurer, générer et exécuter l'exemple

  1. Assurez-vous d'avoir effectué les étapes répertoriées dans Procédure d'installation unique pour les exemples Windows Communication Foundation.

  2. Assurez-vous d'avoir effectué la procédure indiquée à la section Instructions d'installation du certificat de serveur des services Internet (IIS).

  3. Pour générer la solution, suivez les instructions indiquées dans Génération des exemples Windows Communication Foundation.

  4. Pour exécuter l'exemple dans une configuration à plusieurs ordinateurs, suivez les instructions indiquées dans Exécution des exemples Windows Communication Foundation.

  5. Lorsque la fenêtre du client s'affiche, tapez « Sample.txt ». Vous devez rechercher « Copy of Sample.txt » dans votre répertoire.

Exemple de service WSStreamedHttpBinding

L'exemple de service qui utilise WSStreamedHttpBinding se trouve dans le sous-répertoire de service. L'implémentation de OperationContract utilise un MemoryStream pour récupérer dans un premier temps toutes les données du flux entrant avant de retourner MemoryStream. L'exemple de service est hébergé par les services IIS (Internet Information Services).

[ServiceContract]
public interface IStreamedEchoService
{
    [OperationContract]
    Stream Echo(Stream data);
}

public class StreamedEchoService : IStreamedEchoService
{
    public Stream Echo(Stream data)
    {
        MemoryStream dataStorage = new MemoryStream();
        byte[] byteArray = new byte[8192];
        int bytesRead = data.Read(byteArray, 0, 8192);
        while (bytesRead > 0)
        {
            dataStorage.Write(byteArray, 0, bytesRead);
            bytesRead = data.Read(byteArray, 0, 8192);
        }
        data.Close();
        dataStorage.Seek(0, SeekOrigin.Begin);

        return dataStorage;
    }
}

Exemple de client WSStreamedHttpBinding

Le client utilisé pour interagir avec le service à l'aide de WSStreamedHttpBinding se trouve dans le sous-répertoire client. Le certificat utilisé dans cet exemple étant un certificat de test créé avec Makecert.exe, une alerte de sécurité s'affiche lorsque vous tentez d'accéder depuis votre navigateur à une adresse HTTPS telle que https://localhost/servicemodelsamples/service.svc. Pour permettre au client WCF d'utiliser un certificat de test en vigueur, du code supplémentaire a été ajouté au client pour supprimer l'alerte de sécurité. Le code, et la classe qui l'accompagne, ne sont pas requis lors de l'utilisation de certificats de production.

// WARNING: This code is only required for test certificates such as those created by makecert. It is 
// not recommended for production code.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.