Сжатие ответа веб-службы для jQuery - PullRequest
9 голосов
/ 03 января 2011

Я пытаюсь сжать ответ JSON от веб-службы ASMX для использования на стороне клиента jQuery.

В моем web.config уже установлен httpCompression следующим образом: (Я используюIIS 7)

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files" 
    staticCompressionDisableCpuUsage="90" staticCompressionEnableCpuUsage="60" 
    dynamicCompressionDisableCpuUsage="80" dynamicCompressionEnableCpuUsage="50">
    <dynamicTypes>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="application/x-javascript" enabled="true"/>
        <add mimeType="text/css" enabled="true"/>
        <add mimeType="video/x-flv" enabled="true"/>
        <add mimeType="application/x-shockwave-flash" enabled="true"/>
        <add mimeType="text/javascript" enabled="true"/>
        <add mimeType="text/*" enabled="true"/>
        <add mimeType="application/json; charset=utf-8" enabled="true"/>
    </dynamicTypes>
    <staticTypes>
        <add mimeType="application/javascript" enabled="true"/>
        <add mimeType="application/x-javascript" enabled="true"/>
        <add mimeType="text/css" enabled="true"/>
        <add mimeType="video/x-flv" enabled="true"/>
        <add mimeType="application/x-shockwave-flash" enabled="true"/>
        <add mimeType="text/javascript" enabled="true"/>
        <add mimeType="text/*" enabled="true"/>
    </staticTypes>
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
</httpCompression>
<urlCompression doDynamicCompression="true" doStaticCompression="true"/>

Через фиддлер я вижу, что обычные aspx и другие сжатия работают нормально.Однако запрос и ответ jQuery ajax работают должным образом, только ничего не сжимается.

Чего мне не хватает?

Ответы [ 5 ]

13 голосов
/ 17 февраля 2011

Вы можете изменить httpCompression только в applicationHost.config . Смотрите эту ссылку

Как и вы, я сначала попытался изменить его в web.config, но это не сработало. Это сработало только когда я добавил следующие строки в C:\Windows\System32\inetsrv\config\applicationHost.config:

  <dynamicTypes>
       ...
       <add mimeType="application/json" enabled="true" />
       <add mimeType="application/json; charset=utf-8" enabled="true" />
       ...
  </dynamicTypes>
7 голосов
/ 03 октября 2011

ИСПОЛЬЗУЙТЕ NOTEPAD для редактирования applicationHost.config. Я потратил несколько часов, прежде чем понял, что мои изменения, сделанные в notepad ++ (а также в редакторе Visual Studio 2010 !!), не применяются IIS.

Альтернативный способ добавить дополнительный mimeType в коллекцию dynamicTypes / staticTypes - использовать appcmd."C:\Windows\System32\Inetsrv\Appcmd.exe" set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/javascript',enabled='True']" /commit:apphost

И снова: после внесенных изменений вы увидите их только в блокноте.Notepad ++ (а также редактор Visual Studio 2010 !!) поддерживает некоторую альтернативную реальность / хранилище для applicationHost.config.Он показывает вам свою собственную версию файла (отличную от той, которую вы видите в блокноте) даже после того, как файл отредактирован в блокноте и снова открыт в np ++ / VS.

5 голосов
/ 28 ноября 2012

Изменения в web.config не работают из-за следующей строки в applicationHost.config:

<section name="httpCompression" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />

Если заменить его на:

<section name="httpCompression" overrideModeDefault="Allow" />

изменения возможны локально.

Я думаю, что это более удобно, поскольку вы можете настроить каждую службу по-разному, и вам не нужно редактировать applicationHost.config, если вам необходимо добавить новый тип MIME.

Вот пример того, как активировать сжатие в web.config для одной службы ASMX, расположенной в подпапке service:

<location path="service/MySpecificWebService.asmx">
    <system.webServer>
        <httpCompression>
            <dynamicTypes>
                <add mimeType="application/json" enabled="true" />
                <add mimeType="application/json; charset=utf-8" enabled="true" />
            </dynamicTypes>
        </httpCompression>
        <urlCompression doDynamicCompression="true" />
    </system.webServer>
</location>

Что касается фактического редактирования applicationHost.config, я подозреваю, что это не настоящий файл в файловой системе. Если вы скопируете этот файл на рабочий стол, вы сможете отредактировать его в любом текстовом редакторе, а затем скопировать обратно в исходную папку.

5 голосов
/ 18 марта 2011

Ответ Эрика Р в основном правильный ... вам нужно ТОЧНО сопоставить заголовок Content-Type, отправленный IIS в заголовках ответа HTTP. По какой-то причине наш сервер IIS7 отвечал: Тип контента: приложение / JSON; д = 0,5

Я никогда прежде не наблюдал качественного фактора ответа сервера. Как странно.

Когда мы добавили это к dynamicTypes в файле .config, все начало работать:

  <dynamicTypes>
       ...
       <add mimeType="application/json" enabled="true" />
       <add mimeType="application/json; q=0.5" enabled="true" />
       <add mimeType="application/json; charset=utf-8" enabled="true" />
       <add mimeType="application/json; q=0.5; charset=utf-8" enabled="true" />
       ...
  </dynamicTypes>
0 голосов
/ 20 июня 2015

http://forums.iis.net/t/1160210.aspx?missing+applicationhost+config

Предполагается, что файл конфигурации будет% windir% \ system32 \ inetsrv \ config \ applicationhost.config.

(Обратите внимание, что если ваше приложение (которое ищет applicationhost.config) является 32-битным приложением (например, если вы используете 32-битный CMD.EXE), то вы не сможете увидеть файл конфигурации из-за перенаправления Windows SYSWOW32)

Небольшое объяснение относительно отсутствующего applicationhost.config для изменения атрибута overrideModeDefault на Разрешить . Это связано с перенаправлением SYSWOW32.

Кроме того, вы можете не увидеть файлы конфигурации, пока вы не

  1. Откройте папку, вставив "% windir% \ system32 \ inetsrv \ config \" точно в адресную строку File Explorer , а не ваш текст редактор
  2. Щелкните правой кнопкой мыши и отредактируйте файл прямо в этой папке.

Это потому, что по какой-то причине некоторые 64-битные редакторы все еще используют какой-то сбойный диалог выбора файла.

...