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é.
Remarque : |
---|
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.
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 classeWSStreamedHttpBinding
qui dérive de Binding.WSStreamedHttpBinding
contient les éléments de liaison suivants : HttpTransportBindingElement, HttpsTransportBindingElement, TransactionFlowBindingElement et TextMessageEncodingBindingElement. La classe fournit une méthodeCreateBindingElements()
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(); }
Ajoutez la prise en charge de la configuration
Pour exposer le transport via la configuration, l'exemple implémente deux classes :WSStreamedHttpBindingConfigurationElement
etWSStreamedHttpBindingSection
. La classeWSStreamedHttpBindingSection
est un StandardBindingCollectionElement qui exposeWSStreamedHttpBinding
au système de configuration WCF. Le bloc de l'implémentation est délégué àWSStreamedHttpBindingConfigurationElement
, qui dérive de StandardBindingElement. La classeWSStreamedHttpBindingConfigurationElement
a des propriétés qui correspondent à celles deWSStreamedHttpBinding
, 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
Assurez-vous d'avoir effectué les étapes répertoriées dans Procédure d'installation unique pour les exemples Windows Communication Foundation.
Assurez-vous d'avoir effectué la procédure indiquée à la section Instructions d'installation du certificat de serveur des services Internet (IIS).
Pour générer la solution, suivez les instructions indiquées dans Génération des exemples Windows Communication Foundation.
Pour exécuter l'exemple dans une configuration à plusieurs ordinateurs, suivez les instructions indiquées dans Exécution des exemples Windows Communication Foundation.
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.