0

我在使用 Silverlight 5 请求 Gzipped 内容时遇到问题。为了减少使用的带宽,我想对从我们的 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 标头中有什么内容,它都会压缩内容。在客户端 silverlight 端,我检查响应中的 Content-Encoding 标头,并在必要时使用 SharpZipLib 解压缩(DotNetZip 不起作用)。

我仍然将 dotMorten 标记为他的回答是我问题的实际答案。使用 ClientStack 时无法设置标头。

于 2013-01-23T19:10:47.680 回答