0

Silverlight 5 で Gzip されたコンテンツをリクエストするのに問題があります。使用帯域幅を減らすために、Web サービスからリクエストされたコンテンツに gzip を使用したいのですが、残念ながらこれは機能しません。

私はクライアント スタックを使用しており、HttpWebRequest を送信しています。Accept-Encoding ヘッダーを設定しようとしましたが、これを直接変更することは許可されていないことがわかりました。それ以外のプロパティはありません。

では、カスタムの Accept-Encoding ヘッダーを送信するにはどうすればよいでしょうか?

これは、App-Constructor にあるコードです。

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);

これは、リクエストを作成してヘッダーを設定する方法です。

var webRequest = (HttpWebRequest)WebRequest.Create(requestUri);
webRequest.Headers["Accept-Encoding"] = "gzip, deflate";

これは例外です:

{System.ArgumentException: The 'Accept-Encoding' header cannot be modified directly.
Parameter name: name
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at MyClass}
4

2 に答える 2

0

残念ながら、gzip を実行する場合はクライアント スタックを使用しないでください (ブラウザー スタックが既に処理しています)。

于 2013-01-22T23:20:50.827 に答える
0

この場合、私は幸運にもクライアント側だけでなくサービス側も制御できます。私が今行ったことは、基本的に Accept-Encoding ヘッダーをオーバーライドする追加のカスタム ヘッダーを追加することです。私はそれを「Accept-Encoding-Override」と呼んでいます。サービスがこのヘッダーに遭遇すると、Accept-Encoding ヘッダーの内容に関係なくコンテンツを圧縮します。クライアント Silverlight 側で、応答の Content-Encoding ヘッダーを確認し、必要に応じて SharpZipLib を使用して解凍します (DotNetZip は機能しませんでした)。

彼の応答が私の質問に対する実際の回答であるため、私はまだ dotMorten にマークを付けています。ClientStack を使用する場合、ヘッダーを設定する方法はありません。

于 2013-01-23T19:10:47.680 に答える