На стороне сервера вы можете сжать свои ответы, используя HttpModule .HttpModule похож на global.asax в том, что он предоставляет запросы и ответы события жизненного цикла , такие как BeginRequest, ReleaseRequestState и EndRequest.Вы можете изменить содержимое ответа, обработав соответствующее событие и изменив поток вывода.Обычно вы изменяете ответ, прикрепляя выходной фильтр .Например, модуль HttpCompress (больше не обновляется) добавляет сжатые фильтры в события ReleaseRequestState или PreSendRequestHeaders:
http://code.google.com/p/httpcompress/source/browse/trunk/HttpCompress/HttpModule.cs
В дополнение к сжатию содержимоговам нужно установить заголовок Content-Encoding.Более свежий (хотя и бета) пример можно найти в модуле Rich Crane Wicked Compression .CodeProject также имеет пример модуля.
Имейте в виду, что сжатие HttpModule, скорее всего, не будет хорошо работать, если IIS настроен на сжатие на уровне сервера.Кроме того, будьте готовы к нескольким угловым случаям, если вы используете обработчики Ajax или .axd.Эти запросы могут работать не так, как вы ожидаете, или могут не проходить через ваш модуль без явного подключения.
На стороне клиента вам необходимо будет передавать свой собственный токен Accept-Encoding с каждым запросом.Избегайте сжатия на сервере, если этот токен не установлен.Если вы добавите клиентов в будущем, может быть непонятно, почему они терпят неудачу, если все ответы сжимаются с помощью пользовательского сжатия.
Я не уверен, как ваши клиенты делают запросы, но большинство запросов HttpКонвейеры / Response позволяют подключаться к потоку ответов аналогично серверу.Перед отправкой ответа вашему средству визуализации проверьте свой собственный токен кодировки содержимого.Если он присутствует, запустите процедуру распаковки.Если нет, передайте ответ без изменений.