Push-Style Streaming, exemple
Windows Communication Foundation (WCF) a des modèles différents pour traiter les données transmises en continu. WCF implémente un modèle d'extraction de données dans lequel le code d'application (le service) retourne une instance de Stream et compte sur l'infrastructure de niveau inférieur pour extraire des données de ce flux de données et l'écrire sur le réseau. ASP.NET utilise un modèle de transmission de type push : l'infrastructure crée le flux de sortie et le rend disponible pour le code d'application (IHttpHandler
) à l'aide de la propriété OutputStream. Le code d'application est chargé d'écrire des données dans le flux de données. Les deux modèles sont des approches valides et il est fréquent de les lier d'une certaine manière.
Remarque : |
---|
Cet exemple requiert l'installation de .NET Framework version 3.5 pour être généré et exécuté. Visual Studio 2008 est nécessaire pour l'ouverture des fichiers projet et solution. |
Cet exemple montre comment gérer la diffusion en continu à l'aide de scénarios ASP.NET à l'aide du modèle de programmation Web.
Service
Le service implémente deux opérations qui illustrent des scénarios ASP.NET communs, comme indiqué dans le code suivant.
[OperationContract]
[WebGet(UriTemplate = "images")]
public Message GetDynamicImage()
{
string text = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["text"];
Bitmap theBitmap = GenerateImage(text);
Message response = StreamMessageHelper.CreateMessage(MessageVersion.None, "", "image/jpeg",
delegate(Stream outputStream)
{
theBitmap.Save(outputStream, ImageFormat.Jpeg);
});
return response;
}
Notez que la méthode GetDynamicImage()
retourne Message plutôt que Stream. Une implémentation personnalisée de BodyWriter (DelegateBodyWriter
) est utilisée pour implémenter la sémantique de la diffusion en continu de la transmission de type push.
DelegateBodyWriter
prend un paramètre délégué, qui prend le flux de sortie en tant qu'entrée.
public delegate void StreamWriterDelegate(Stream output);
class DelegateBodyWriter : BodyWriter
{
StreamWriterDelegate writer;
public DelegateBodyWriter(StreamWriterDelegate writer)
: base(false)
{
this.writer = writer;
}
protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
{
writer.WriteStartElement("Binary");
XmlWriterStream stream = new XmlWriterStream(writer);
this.writer(stream);
stream.Close();
writer.WriteEndElement();
}
}
Puis le délégué StreamWriterDelegate
est appelé pendant l'exécution de RawStreamResponseMessage.OnWriteBodyContents()
.
La classe XmlWriterStream
est un adaptateur qui fournit une API Stream sur le XmlDictionaryWriter utilisé par la classe Message.
Vous pouvez consulter la sortie de l'exemple dans un navigateur Web. Pour interagir avec l'exemple, accédez aux URL suivantes pendant que le service s'exécute.
https://localhost:8000/images?text=Hello, world!
https://localhost:8000/text?text=Hello, world!
Pour configurer, générer et exécuter l'exemple
Assurez-vous d'avoir effectué la procédure indiquée dans la section Procédure d'installation unique pour les exemples Windows Communication Foundation.
Pour générer l'édition C# ou Visual Basic .NET de la solution, conformez-vous aux instructions figurant dans Génération des exemples Windows Communication Foundation.
Pour exécuter l'exemple dans une configuration à un ou plusieurs ordinateurs, suivez les instructions indiquées dans Exécution des exemples Windows Communication Foundation.
Voir aussi
Tâches
Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.