方法 : シリアル化されたデータをチャンクする

Web サービス メッセージ内で大きなデータ セットを送信すると、次の 2 つの問題が発生します。

  1. シリアル化エンジンのバッファリングによるワーキング セット (メモリ) の巨大化

  2. Base64 エンコーディングの実行後はサイズが 33% 増大することによる、帯域幅の過剰消費

これらの問題を解決するには、シリアル化と逆シリアル化を制御する IXmlSerializable インターフェイスを実装します。特に、WriteXml メソッドと ReadXml メソッドを実装することで、データをチャンクします。

サーバー側チャンク処理を実装するには

  1. サーバー コンピュータ上で、Web メソッドが ASP.NET バッファリングを無効にし、IXmlSerializable を実装する型を返す必要があります。

  2. IXmlSerializable を実装する型は、WriteXml メソッド内でデータをチャンクします。

クライアント側の処理を実装するには

  1. クライアント プロキシ上で IXmlSerializable を実装する型を返すように Web メソッドを変更します。SchemaImporterExtension を使用するとこの処理を自動化できますが、この方法はここでは説明しません。

  2. チャンクされたデータ ストリームを読み込み、バイトをディスクに書き込むための ReadXml メソッドを実装します。この実装により、進行状況イベントも発生します。これは、プログレス バーなどのグラフィック コントロールに使用できます。

次のコード例では、クライアント上で ASP.NET バッファリングを無効にする Web メソッドを示します。また、WriteXml メソッドにおいてデータをチャンクする IXmlSerializable インターフェイスをクライアント側で実装する方法も示します。

コードのコンパイル

関連項目

概念

カスタムのシリアル化

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.