В нашем рабочем проекте мы используем связку APS.NetRIA ServicesSilverlight. Объем передаваемых данных от сервера к клиенту бывает достаточно большим, несколько мегабайт.

Неплохо было бы использовать компрессию gzip, как для статического содержимого типа html-страниц, css и javascript файлов, так и для динамических данных, в том числе от WCF сервиса (ибо в основе RIA Services лежит WCF).

На рабочем сервере системы используется IIS7, а на тестовом — IIS6. Озадачившись вопросом компрессии я использовал руководство для IIS6 и руководство для IIS7 по настройке сжатия в gzip. В результате система работала на обоих серверах, но данные от веб-сервиса не сжимались, что меня весьма огорчало.

В поисках решения вот тут было найдено предложение насильно жать ответ от веб-сервиса с помощью gzip или deflate компрессии, если по заголовкам запроса  видно, что клиент готов принять сжатые данные. После реализации данного  метода компрессия заработала в IIS7, однако при работе с системой  на сервере с IIS6 стали происходить ужасные вещи: сервер в заголовке  указывал один размер сообщения, а по факту отдавал другой (спасибо  Fiddler2), большая часть запросов завершалась по тайм ауту. Говоря  простыми словами, система не работала.

В конечном счёте решение было найдено, оно связано с более правильной настройкой серверов IIS.

Для IIS6 с помощью инструкции по решению проблем выполняем шаги 1, 2, 3, 4 и на четвертом шаге добавляем расширение «svc» в список компрессируемых файлов (т. к. если посмотреть на запрос к веб-сервису в Fiddler2 можно увидеть, что генерируемый веб-сервис имеет расширение .svc). Перезапускаем w3svc и радуемся.

Для IIS7 надо указать MIME-типы данных, которые должны сжиматься. Для запросов RIA Services это «application/msbin1». Настроить эти типы данных можно в файле конфигурации IIS7 C:\Windows\System32\inetsrv\config\applicationhost.config в секции httpCompression примерно таким образом:

       <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
               <scheme name="gzip"  dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9"  dynamicCompressionLevel="4" />
               <staticTypes>
                       <add mimeType="text/*" enabled="true" />
                       <add mimeType="message/*" enabled="true" />
                       <add mimeType="application/javascript" enabled="true" />
                       <add mimeType="*/*" enabled="false" />
               </staticTypes>
               <dynamicTypes>
                       <add mimeType="text/*" enabled="true" />
                       <add mimeType="message/*" enabled="true" />
                       <add mimeType="application/x-javascript" enabled="true" />
       <add mimeType="application/atom+xml" enabled="true" />
       <add mimeType="application/xaml+xml" enabled="true" />
       <add mimeType="application/xop+xml" enabled="true" />
       <add mimeType="application/soap+xml" enabled="true" />
       <add mimeType="application/msbin1" enabled="true" />
                       <add mimeType="*/*" enabled="false" />
               </dynamicTypes>
       </httpCompression>

Сжимайте на здоровье!