2011-01-13 16 views
1

Webサービス(Webメソッド)から出力データを圧縮する方法を教えてください。出力はXmlDocument型です。ASP.NET WebService応答圧縮

ここにコードがあります。

[WebMethod] 
public XmlDocument GetPersonalInfo(int CustomerID) 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml(new CustomersXML().GetPersonalInfo(CustomerID)); 
    return doc; 
} 

どのようにこの応答をGzipしますか? Flexクライアントから呼び出されているWebサービスのページ(HTTP呼び出し)ではないことに注意してください。

おかげ

答えて

0

私はコードを探すために時間を持っていないが、gzipとデフレベースの圧縮方式の両方のためのいくつかのクラスを持っている名前空間System.IO.Compressionがあります。 Gzipはおそらく、言語間通信のためのより安全な賭けです。私は、デフレの圧縮がどれくらい広がっているかについては確信していません。

ただし、クライアントサーバーにストリームの解凍を指示するSOAPパケットのヘッダーがある限り、通信に問題はないはずです。

注:一部のホストではGzipがデフォルトでオンになっているため、これを実行する前にサーバー設定を再度確認してください。

0

これは.NETとは関係ありません。

GZIPはWebサーバーのHTTP機能です。クライアントは要求を送信する際に一般にACCEPTヘッダーにGZIPを送信してサーバーに通知します。

IISで設定する必要があります。バージョンによって異なります。 IIS 7では、設定が非常に簡単です。 hereを参照してください。

+2

Gzipでは唯一のIIS7ではデフォルトで標準として導入され、それApacheのモジュールとしてしか利用できないので、私は ".NETとは何の関係もない"とは言いませんが、これはプログラムで呼び出すことができないことを意味しています。あなたは間違いなくGzippedストリームを.NETから直接出力することができます。その慎重さは完全に別個の問題かどうか。 –

1

This answer参考文献ancient articleSharpZipLibを使用してこのプログラムを実装する方法を説明しています。

Another answerは、SharpZipLibの代わりに使用できるSystem.IO.Compressionclassesの使用を示しています。

Rick Strahlは、上記の例では対処されていないと思われる潜在的な問題をレビューし、圧縮を実装する際に注意してください。彼はan articleにリンクして、IIS7の組み込み圧縮の使用方法の詳細を提供しています。

1

あなたのIISまたは何でも設定ファイルに移動し、適切な場所に次の行を追加します。

<add mimeType="application/json" enabled="true" /> 

私は同じ問題を持っていた - 私のIISはを除き、任意のHTTPレスポンスをgzip圧縮することができましたjsonレスポンス(私のアプリでgzip圧縮が最も必要な場合)。助け

希望

更新: アプリケーションホストの設定ファイルはここに配置する必要があります:%WINDIR%\ System32に\ inetsrvに\ CONFIG

関連する問題