Web服务的IIS压缩返回大字符串值

时间:2012-03-31 20:34:05

标签: web-services iis asmx gzip

我有一个Web服务以String格式返回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,我在Developer Tools中查看了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服务。

1 个答案:

答案 0 :(得分:2)

安吉洛,

IIS6上的设置组合非常敏感且无法容忍。例如,各种可配置文件扩展名必须从新行开始 - 不以空格分隔。 IIS6压缩的敏感性是尤其 true,其中涉及动态生成的内容(如来自webservices的返回)。

尝试以下设置,执行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>