.NETクライアントアプリによって使用される.NETアプリ(IISではない)によって公開されるADO.NETデータサービスがあります。このデータサービスを呼び出すと、大量のデータが返されます。
ペイロードを減らしてパフォーマンスを向上させるために、ネットワーク上のXMLデータを圧縮したいと思います。これは可能ですか?
.NETクライアントアプリによって使用される.NETアプリ(IISではない)によって公開されるADO.NETデータサービスがあります。このデータサービスを呼び出すと、大量のデータが返されます。
ペイロードを減らしてパフォーマンスを向上させるために、ネットワーク上のXMLデータを圧縮したいと思います。これは可能ですか?
.NET「アプリ」でWCFを使用してホストしていると思いますか? MessageEncoder
その場合、 WCF はそのままでは提供しないため、カスタム実装を作成する必要があります。幸いなことに、SDKに使用できるサンプルがあります。
あなたのクライアントがWCFでもあるかどうかに応じて、これは2つのステップのうちの1つにすぎないことに気付きましたか? これによりメッセージがエンコードされますが、クライアントが同様に構成されたデコーダーを使用している必要があります。その実装では、「純粋な」HTTP クライアントに対してエンコードが行われたことを通知するために必要な HTTP ヘッダーが設定されないためです。したがって、相手側が WCF クライアントでない場合は、メッセージ自体をエンコードするだけでなく、 を使用して適切なヘッダーWebOperationContext
を適用する必要があります。Content-Encoding: gzip
残念ながら、実装自体の中でこれを行うことはできませんMessageEncoder
。プロセスが遅すぎるためです。MessageEncoder
メッセージ フレーム (この場合は HTTP ヘッダー) にメッセージの内容を書き込むように求められますが、既に書き込まれています。IOperationBehavior
そのため、それに応じてヘッダーを設定する操作に適用されるの形式の追加の動作も必要になります。
GZipStreamを使用して圧縮および解凍できます。