【问题标题】:IIS Compression For WebService Returning a Large String ValueWebService 的 IIS 压缩返回大字符串值
【发布时间】:2012-03-31 20:34:04
【问题描述】:

我有一个 Web 服务以字符串格式返回 XML 值。

通过 IE9,我可以看到某些 Web 服务调用的大小高达 1MB。

我通过编辑 Metabase.xml 文件在 IIS 6 中启用了压缩,设置如下:

HcScriptFileExtensions = "asmx"

IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/gzip"

我还在 IIS 管理器中的网站属性的服务选项卡上启用了 HTTP 压缩。

我还在 Web 服务扩展中添加了 HttCompression,映射到 Windows\System32\inetsrv\ 文件夹中的 gzip dll。

当我调用 Web 服务时,返回的值没有被压缩(与之前的服务调用大小相同)。

有什么技巧可以确保 IIS 压缩 IIS 返回的字符串数据值?

更新: 我还按照这些链接上的说明进行操作:

http://rextang.net/blogs/work/archive/2007/09/12/5654.aspx http://blogs.msdn.com/b/rextang/archive/2007/09/13/4880187.aspx

使用IE9,我从开发者工具,查看Web服务调用的详细视图,可以看到Accept-Encoding键的值为gzip/deflate。

Web 服务 SOAP XML(以字符串形式)值仍未被压缩。我应该进一步研究哪些领域?

顺便说一下,我使用的是 IIS6。

更新: 我检查了这个网站: http://blogs.iis.net/webtopics/archive/2009/02/24/troubleshooting-http-compression-in-iis-6-0.aspx

我正确地拿到了项目 1,2,3。

对于第 4 项,我什至尝试只将 asmx 设置为扩展名,但无济于事。

对于第 5 项,我在子级没有任何压缩设置。

对于第 6 项,防病毒软件不会对目录进行扫描以进行压缩。

对于第 7 项,我没有将斜杠作为参数传递给正在执行的 DLL。

对于第 8 项,我不确定在哪里/如何检查。

对于第 9 项,我已经与 fiddler 进行了核对,并且将正确的标头放置在请求标头上。

对于第 10 项,我在我的应用程序中看不到任何需要触摸它的设置。

对于第 11 项,我收到的状态代码是 200。

对于第 12 项,访问应用时未指定代理。

对于第 13 项,请求是 Web 服务。

【问题讨论】:

标签: web-services iis asmx gzip


【解决方案1】:

安吉洛,

IIS6 上的设置组合是超级敏感和无情的。例如,各种可配置文件扩展名都必须从新行开始 - 不以空格分隔。 IIS6 压缩的微妙之处尤其是在涉及动态生成的内容(如来自 Web 服务的返回)时更是如此。

尝试以下设置,执行 IIS 重置以重新加载这些元数据库更改,然后祈祷!

<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"
    HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
    HcCreateFlags="0"
    HcDoDynamicCompression="TRUE"
    HcDoOnDemandCompression="TRUE"
    HcDoStaticCompression="TRUE"
    HcDynamicCompressionLevel="10"
    HcFileExtensions="htm
                      html
                      xml
                      css
                      txt
                      rdf
                      js"
    HcOnDemandCompLevel="10"
    HcPriority="1"
    HcScriptFileExtensions="asp
                            cgi
                            exe
                            dll
                            aspx
                            asmx"
        >
</IIsCompressionScheme>
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"
    HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
    HcCreateFlags="1"
    HcDoDynamicCompression="TRUE"
    HcDoOnDemandCompression="TRUE"
    HcDoStaticCompression="TRUE"
    HcDynamicCompressionLevel="10"
    HcFileExtensions="htm
                      html
                      xml
                      css
                      txt
                      rdf
                      js"
    HcOnDemandCompLevel="10"
    HcPriority="1"
    HcScriptFileExtensions="asp
                            cgi
                            exe
                            dll
                            aspx
                            asmx"
        >
</IIsCompressionScheme>
<IIsCompressionSchemes Location ="/LM/W3SVC/Filters/Compression/Parameters"
    HcCacheControlHeader="max-age=86400"
    HcCompressionBufferSize="8192"
    HcCompressionDirectory="%windir%\IIS Temporary Compressed Files"
    HcDoDiskSpaceLimiting="FALSE"
    HcDoDynamicCompression="TRUE"
    HcDoOnDemandCompression="TRUE"
    HcDoStaticCompression="TRUE"
    HcExpiresHeader="Wed, 01 Jan 1997 12:00:00 GMT"
    HcFilesDeletedPerDiskFree="256"
    HcIoBufferSize="8192"
    HcMaxDiskSpaceUsage="99614720"
    HcMaxQueueLength="1000"
    HcMinFileSizeForComp="1"
    HcNoCompressionForHttp10="FALSE"
    HcNoCompressionForProxies="FALSE"
    HcNoCompressionForRange="FALSE"
    HcSendCacheHeaders="FALSE"
        >
</IIsCompressionSchemes>

【讨论】:

  • Angelo,我还推荐 Fiddler2,它是一种很好的方式来评估内容大小的变化。如果您在进行更改之前运行它并保存加载页面的输出,您将有一个基准来衡量未来的测试。
  • 有人提到-“可配置的文件扩展名必须每个都从新行开始”。分隔文件扩展名的空格怎么样?它们被标记了 3 次吗?
  • @Angelo 我认为只要您确实在其中有回车,它就会起作用。问题是当它们在同一行时只有空格。对于您的测试,请尝试添加 ASMX,一旦您确认它工作正常,您可以添加更多扩展来支持多个扩展。
  • 我实际上尝试只使用 asmx,但数据仍然没有被压缩。
  • @Angelo 我很茫然,没有看到某种“啊哈!”信息类型。出于好奇,您是否测试过对 any 文件类型的 any 类型的压缩是否有效?由于没有任何工作,我开始怀疑您的服务器是否实际上以 IIS5 的隔离模式运行。当您查看该服务器上的任务管理器时,您是否看到 W3WP.EXE 或 ASPNET_WP.EXE 正在运行?您熟悉隔离模式配置吗?如果没有,请阅读:microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/…
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 2010-11-24
  • 1970-01-01
  • 2015-05-04
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多