Сжатие IIS для WebService, возвращающее большое строковое значение - PullRequest
2 голосов
/ 01 апреля 2012

У меня есть веб-служба, возвращающая значение XML в формате String.

Через IE9 я вижу, что некоторые размеры вызовов веб-службы достигают 1 МБ.

Я включил сжатие в IIS 6, отредактировав файл Metabase.xml, установив следующее:

HcScriptFileExtensions = "asmx"

в

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

Я также включил сжатие HTTP на вкладке Сервис длясвойства веб-сайтов в диспетчере IIS.

Я также добавил сжатие HttCompression в расширениях веб-служб, сопоставляя их с библиотекой gzip в папке Windows \ System32 \ inetsrv \.

Когда я выполняюпри вызове веб-службы возвращаемое значение не сжимается (того же размера, что и при вызове службы ранее).

Есть ли какие-либо советы, чтобы гарантировать, что 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, I из Инструментов разработчика, проверяя подробный вид веб-службывызовите, я вижу, что ключ Accept-Encoding имеет значение gzip / deflate.

Значение XML (в строке) SOAP веб-службы все еще не сжимается.Какие области, где я должен искать дальше?

Кстати, я использую IIS6.

Обновление: я проверил этот сайт: http://blogs.iis.net/webtopics/archive/2009/02/24/troubleshooting-http-compression-in-iis-6-0.aspx

Я получил элементы 1, 2,3 правильно.

Для пункта 4 я даже пытался установить только asmx как расширение, но безрезультатно.

Для пункта 5 у меня нет настроек сжатия у ребенкаlevel.

Для элемента 6 антивирус не проверяет каталог на предмет сжатия.

Для элемента 7 я не передаю косую черту в качестве параметра исполняющей DLL.

По пункту 8 я не уверен, где и как это проверить.

По пункту 9 я проверил с помощью fiddler, и соответствующие заголовки помещаются в заголовки запроса.

Для элемента 10 я не вижу никаких настроек в моих приложениях, которые бы требовали прикосновения к нему.

Для элемента 11 код состояния, который я получаю, равен 200.

Для элемента 12доступ к приложению без указания прокси.

Для пункта 13 запрос является веб-службой.

1 Ответ

2 голосов
/ 12 апреля 2012

Angelo

Сочетание настроек в IIS6 очень чувствительно и неумолимо. Например, различные настраиваемые расширения файлов должны начинаться с новой строки, не разделенной пробелами. Чувствительность сжатия IIS6 , особенно , истинна, когда речь идет о динамически генерируемом контенте (например, при возврате из веб-сервисов).

Попробуйте настройки ниже, выполните сброс 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>
...