WCF REST Сжатие
У меня есть служба REST, которая возвращает большой кусок XML, стоимостью около 150 тыс.
например, http://xmlservice.com/services/RestService.svc/GetLargeXML
Поэтому я хочу сжать ответ от сервера, так как GZIP должен уменьшить его до чего-то гораздо меньшего. Обыскав везде, я не могу на всю жизнь найти пример того, как выполнить сжатие для служб WCF REST. Помогите!!
ПРИМЕЧАНИЕ. Моя служба размещена третьей стороной, и я НЕ МОГУ это делать через IIS, поскольку она не поддерживается ими.
1 ответ
Это на самом деле довольно легко сделать, по крайней мере, с.NET 4.0 (я не тестировал с 3.5). Я просто позволяю IIS 7 позаботиться об этом. Нет необходимости создавать собственный фильтр сжатия.
Сначала убедитесь, что вы установили функцию динамического сжатия для IIS 7. Затем выберите сервер в IIS Manager и используйте модуль сжатия, чтобы включить динамическое сжатие. Кроме того, вы можете сделать это из командной строки:
C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true
Затем отредактируйте следующий файл. Возможно, вам придется сделать его копию, а не редактировать конфигурацию напрямую (Notepad++ жалуется на меня), а затем перезаписать оригинал, когда вы будете готовы.
C:\Windows\System32\Inetsrv\Config\applicationHost.config
Там вы найдете раздел
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/xml" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
После того, как вы все это сделали, переработайте пул приложений, и все будет хорошо. Если это не сработает, попробуйте перезапустить сервер и убедиться, что динамическое сжатие включено как на уровне приложения, так и на уровне сервера.
Примечание. Согласно некоторым сообщениям, которые я читал, раньше была ошибка, когда вам приходилось указывать кодировку символов (например, "application/json; charset=utf-8"). Однако у меня не было никаких проблем.