次の方法で共有


プッシュ型ストリーミングのサンプル

Download sample

Windows Communication Foundation (WCF) には、ストリーム化されたデータを処理するさまざまなモデルがあります。WCF は "プル" モデルを実装します。このモデルでは、アプリケーション コード (サービス) が Stream のインスタンスを返し、低いレベルのインフラストラクチャに依存してこのストリームからデータを取得し、ネットワークに書き込みます。ASP.NET では "プッシュ" モデルが使用されます。このモデルでは、インフラストラクチャにより出力ストリームが作成され、OutputStream プロパティを使用してアプリケーション コード (IHttpHandler) で使用できるようにします。アプリケーション コードはストリームにデータを書き込みます。両方のモデルは有効なアプローチであり、なんらかの方法で 2 つのメソッドをつなぐのが一般的です。

Noteメモ :

このサンプルをビルドして実行するには、.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!

サンプルを設定、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. 単一コンピュータ構成か複数コンピュータ構成かに応じて、「Windows Communication Foundation サンプルの実行」の手順に従います。

関連項目

その他の技術情報

ストリーミング フィードのサンプル

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.