プッシュ型ストリーミングのサンプル
Windows Communication Foundation (WCF) には、ストリーム化されたデータを処理するさまざまなモデルがあります。WCF は "プル" モデルを実装します。このモデルでは、アプリケーション コード (サービス) が Stream のインスタンスを返し、低いレベルのインフラストラクチャに依存してこのストリームからデータを取得し、ネットワークに書き込みます。ASP.NET では "プッシュ" モデルが使用されます。このモデルでは、インフラストラクチャにより出力ストリームが作成され、OutputStream プロパティを使用してアプリケーション コード (IHttpHandler
) で使用できるようにします。アプリケーション コードはストリームにデータを書き込みます。両方のモデルは有効なアプローチであり、なんらかの方法で 2 つのメソッドをつなぐのが一般的です。
メモ : |
---|
このサンプルをビルドして実行するには、.NET Framework Version 3.5 をインストールする必要があります。Visual Studio 2008 では、プロジェクト ファイルとソリューション ファイルを開く必要があります。 |
このサンプルは、Web プログラミング モデルを使用して ASP.NET シナリオを使用するストリーミングを指定する方法を示します。
サービス
次のコードで示すように、サービスは一般的な ASP.NET シナリオを示す 2 つの操作を実装します。
[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;
}
GetDynamicImage()
メソッドは Message を返します。Stream は返しません。BodyWriter (DelegateBodyWriter
) のカスタム実装を使用して、"プッシュ" ストリーミング セマンティクスを実装します。
DelegateBodyWriter
はデリゲート パラメータを使用します。これは、出力ストリームを入力として使用するものです。
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();
}
}
次に、RawStreamResponseMessage.OnWriteBodyContents()
の実行時に StreamWriterDelegate
デリゲートが呼び出されます。
XmlWriterStream
クラスは、Message クラスによって使用される XmlDictionaryWriter 上の Stream API を提供するアダプタです。
Web ブラウザにサンプルの出力を表示できます。サンプルと対話するには、サービスの実行中に次の URL に移動します。
https://localhost:8000/images?text=Hello, world!
https://localhost:8000/text?text=Hello, world!
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。
関連項目
その他の技術情報
Copyright © 2007 by Microsoft Corporation.All rights reserved.