Сжатие ответа веб-службы JSON в IIS 7
У меня проблемы со сжатием ответов в формате JSON. Я просматриваю заголовки ответов после загрузки веб-сайта на рабочий сервер (Windows 2008, IIS 7) и обнаруживаю несжатый ответ. Включение "Включено статическое сжатие" и "Включить динамическое сжатие" на панели управления IIS не влияет. Ответ ASPX-страниц был получен, но ответ веб-службы распакован.
Я посмотрел в Google, но не нашел ответа об этой проблеме. Кроме того, я пробую этот способ сжатия json ihttpmodule (и добавляю в web.config этот модуль) - но этот источник отлично работает на машине разработки с сервером разработки ASP.NET (и имеет уменьшенный в 7 раз размер ответа) и полностью игнорируется в IIS7.
Как я могу применить сжатие gzip к ответам json от моего веб-сервиса? Благодарю.
PS.NET 3.5
3 ответа
Я наткнулся на ту же проблему с JsonCompressionModule. Он работал на сервере разработки, но не на IIS 7. Я понял, что в IIS 7 недостаточно добавить дескриптор в system.web, но также в system.webServer (см. Ниже). После этого изменения он отлично работает на IIS 7.
<system.web>
<httpModules>
<add name="JsonCompressionModule" type="JsonCompressionModule"/>
</httpModules>
</system.web>
<system.webServer>
<modules>
<add name="JsonCompressionModule" preCondition="managedHandler" type="JsonCompressionModule"/>
</modules>
</system.webServer>
Динамическое сжатие IIS использует заголовок типа содержимого ответа, чтобы определить, должно ли оно сжимать содержимое или нет. Настройки по умолчанию не сжимают "application / json". Вы можете найти больше информации на http://www.iis.net/configreference/system.webserver/httpcompression
Чтобы добавить его, откройте командную строку администратора, выполните приведенные ниже команды и перезапустите службу IIS.
cd \Windows\System32\inetsrv
appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json',enabled='True']" /commit:apphost
Вы можете добавить несколько других типов контента. Единственное приложение /*, которое сжимает динамические настройки по умолчанию, - это application/x-javascript.
Пожалуйста, попробуйте изучить заголовки запросов, которые отправляет клиент. Accept-Encoding должен иметь значение gzip или deflate. Убедитесь, что клиент может распаковать JSON. Существует решение, которое может устанавливать Accept-Encoding и выполнять сжатие GZIP вместе - Helicon Ape ( http://www.helicontech.com/ape/). Следующая конфигурация сделает оба трюка:
# Manually set required request header
RequestHeader append Accept-Encoding gzip early
# Enable high-level (9) comression for JSON files
SetEnvIf mime application/json gzip=9