Сжатие ответа веб-службы JSON в IIS 7 - PullRequest
2 голосов
/ 20 марта 2010

У меня проблемы со сжатием ответов в формате JSON. Я просматриваю заголовки ответа после загрузки веб-сайта на рабочий сервер (Windows 2008, IIS 7) и обнаруживаю несжатый ответ. Включение параметров «Включено статическое сжатие» и «Включить динамическое сжатие» на панели управления IIS не влияет. Ответ ASPX-страниц был получен, но ответ веб-службы распакован.

Я посмотрел в Google, но не нашел ответа об этой проблеме. Кроме того, я пробую этот способ json ihttpmodule (и добавление в web.config этого модуля) - но этот источник отлично работает на машине разработки с сервером разработки ASP.NET (и уменьшил размер ответа в семь раз) и полностью игнорируется в IIS7.

Как я могу применить сжатие gzip к ответам json от моего веб-сервиса? Спасибо.

PS .NET 3.5

Ответы [ 3 ]

3 голосов
/ 24 марта 2010

Я наткнулся на ту же проблему с 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>
2 голосов
/ 11 ноября 2013

Динамическое сжатие 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.

0 голосов
/ 22 марта 2010

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