To jest rzeczywiście bardzo łatwo to zrobić, przynajmniej z .NET 4.0 (nie testowałem z 3.5). Po prostu pozwól IIS 7 zająć się tym. Nie ma potrzeby tworzenia niestandardowego filtru kompresji.
Najpierw upewnij się, że masz zainstalowaną funkcję dynamicznej kompresji dla usług IIS 7. Następnie wybierz serwer w Menedżerze usług IIS i użyj modułu kompresji, aby włączyć kompresję dynamiczną. Możesz to również zrobić z wiersza poleceń:
C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true
Następnie edytuj następujący plik. Być może będziesz musiał zrobić kopię, zamiast bezpośrednio edytować konfigurację (Notepad ++ narzeka na mnie), a następnie nadpisać oryginał, gdy będziesz gotowy.
C:\Windows\System32\Inetsrv\Config\applicationHost.config
Tam znajdziesz <dynamicTypes> sekcję pod <httpCompression>. Pod <dynamicTypes> będziesz musiał dodać wszystkie typy mime, które chcesz skompresować, gdy klient wyśle nagłówek Accept-Encoding: gzip. Na przykład:
<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>
Po wykonaniu tych czynności należy poddać recyklingowi pulę aplikacji i powinieneś być gotowy. Jeśli to nie pomoże, spróbuj ponownie uruchomić serwer i upewnij się, że kompresja dynamiczna jest włączona na poziomie aplikacji i na poziomie serwera.
Uwaga: Według niektórych postów, które czytałem, był błąd, w którym trzeba było określić kodowanie znaków (np. "Application/json; charset = utf-8"). Jednak nie miałem żadnych problemów.
Dzięki, ale niestety jest to rozwiązanie WS (SOAP), a nie REST (webHttp). – PhilJ