データをクライアントに送信する前に、C1.Zip ライブラリ(ComponentOne Studio に同梱されているデスクトップバージョンです。Silverlight バージョンではありません)を使用して、ストリームを圧縮します。圧縮するには、C1.Zip ライブラリへの参照を追加して MasterDetailWeb プロジェクトを変更し、次のように DataService.asmx.cs Web サービスの GetData メソッドを変更します。
コードのコピー
|
|
---|---|
[WebMethod] public byte[] GetData(string tables) { // 接続文字列を使って DataSet を作成します var ds = GetDataSet(); // DataSet にデータをロードします ds.Fill(tables.Split(',')); // ストリームに保存します var ms = new MemoryStream(); using (var sw = new C1.C1Zip.C1ZStreamWriter(ms)) ds.WriteXml(sw, XmlWriteMode.WriteSchema); //ds.WriteXml(ms, XmlWriteMode.WriteSchema); // ストリームデータを返します return ms.ToArray(); } |
クライアントにデータを送信する前にサーバー側でデータを圧縮するために必要な作業はこれだけです。ここでは、DataSet をストリームに直接保存するのではなく、ストリームにデータを書き込む前にデータを圧縮する C1ZStreamWriter を使ってデータを保存しています。データは XML としてエンコードされるため、圧縮率は高くなります。