【发布时间】:2008-08-13 16:08:43
【问题描述】:
我有一个可以访问 WCF Web 服务的 silverlight 2 beta 2 应用程序。正因为如此,它目前只能使用 basicHttp 绑定。 Web 服务将返回相当大量的 XML 数据。从带宽使用的角度来看,这似乎是相当浪费的,因为响应,如果压缩,会小 5 倍(我实际上将响应粘贴到一个 txt 文件并压缩它。)。
请求确实有“Accept-Encoding: gzip, deflate” - 有没有办法让 WCF 服务 gzip(或以其他方式压缩)响应?
我确实找到了这个link,但对于应该开箱即用的功能来说,恕我直言,它确实看起来有点复杂。
好的 - 起初我使用 System.IO.Compression 标记解决方案作为答案,因为我永远无法“似乎”让 IIS7 动态压缩工作。好吧,事实证明:
IIS7 上的动态压缩一直在工作。只是 Nikhil 的 IE Web Developer Helper 插件没有显示它工作。我的猜测是,由于 SL 将 Web 服务调用交给浏览器,浏览器会“在幕后”处理它,而 Nikhil 的工具永远不会看到压缩响应。我能够通过使用监视浏览器应用程序外部流量的 Fiddler 来确认这一点。在 fiddler 中,响应实际上是 gzip 压缩的!!
System.IO.Compression 解决方案的另一个问题是 Silverlight CLR 中不存在 System.IO.Compression。
所以从我的角度来看,在 Silverlight 中启用 WCF 压缩的最简单方法是在 IIS7 中启用动态压缩并且根本不编写任何代码。
【问题讨论】:
-
动态压缩仅适用于某些请求(即那些被 IIS 视为经常调用的请求)。所以这是一个很好的功能,但你无法控制它。当用户登录时,我的通话量非常大。但它每天都会发生一次。而且它没有被压缩。
标签: wcf silverlight compression gzip