Ejemplo de secuencia de estilo de inserción
Windows Communication Foundation (WCF) tiene los modelos diferentes para tratar con datos vertidos. WCF implementa un modelo de la "extracción" en el que el código de aplicación (el servicio) devuelve una instancia de Stream y confía en la infraestructura de menos nivel para extraer los datos de esta secuencia y escribirlos en la red. ASP.NET utiliza un modelo de la "inserción": la infraestructura crea la secuencia de salida y lompone a disposición del código de aplicación (el IHttpHandler
) utilizando la propiedad OutputStream. El código de aplicación es responsable de escribir los datos en la secuencia. Ambos modelos son enfoques válidos y es un punto en común para unir los dos métodos de alguna manera.
Nota
Para generar y ejecutar este ejemplo, es necesario que esté instalado .NET Framework versión 3.5. Para abrir los archivos de solución y proyecto se necesita Visual Studio 2008.
Este ejemplo muestra cómo resolver la transmisión por secuencia utilizando escenarios de ASP.NET mediante el modelo de programación de Web.
Servicio
El servicio implementa dos operaciones que muestran los escenarios de ASP.NET comunes, como se muestra en el código siguiente.
[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;
}
Observe que el método GetDynamicImage()
devuelve Message en lugar de Stream. Una implementación personalizada de BodyWriter (DelegateBodyWriter
) se utiliza para implementar la semántica de transmisión por secuencias de "inserción."
DelegateBodyWriter
toma un parámetro de delegado, que toma la secuencia de salida como entrada.
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();
}
}
El delegado StreamWriterDelegate
se invoca a continuación durante la ejecución de RawStreamResponseMessage.OnWriteBodyContents()
.
La clase XmlWriterStream
es un adaptador que proporciona una Stream API sobre XmlDictionaryWriter utilizado por la clase Message.
Se puede ver el resultado del ejemplo en un explorador web. Para interactuar con el ejemplo, navegue por las direcciones URL siguientes mientras el servicio se está ejecutando.
https://localhost:8000/images?text=Hello, world!
https://localhost:8000/text?text=Hello, world!
Para configurar, generar y ejecutar el ejemplo
Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.
Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.
Consulte también
Otros recursos
Ejemplo de suministros de transmisión por secuencias
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.