2009-03-16 9 views
5

Na razie utknąłem z IIS6 dla ASP.NET-MVC (jak na razie nie mogę zaktualizować do wersji Server 2008). Nie wydaje się, aby wiedzieć, że moje RESTful URLS są plikami dynamicznymi i ich nie kompresuje.Opcje kompresji ASP.NET MVC w IIS6

Wszystkie moje stare pliki .aspx są skompresowane (jak widać w Fiddler), ale nie są to adresy URL typu '/products/1001'.

Czy istnieje sposób, aby IIS6 kompresować moje ActionResults w IIS6 bez używania czegoś takiego jak ActionFilter for compression.

Zakładam, że IIS7 jest na tyle sprytny, by wiedzieć, że jest dynamiczny.

Dodatkowe punkty, jeśli możesz mi powiedzieć, jak IIS6 wie nawet, które pliki są dynamiczne!

Odpowiedz

5

jak kompresja HTTP dla ASP.NET zwykle został wdrożony przy użyciu HttpModules od wersji 1.0, a HttpModules nadal należą do żądania rurociągu ASP.NET używane przez framework MVC, nadal można używać HttpModule wstrzyknąć GZIP lub korekta filtr odpowiedzi.

Tutaj można znaleźć bardzo ładny, open-source, gotowy do wysyłki realizacji: HttpCompress by Ben Lowery (do pobrania na Google Code)

Po prostu trzeba dodać odwołanie do biblioteki DLL, i dodać kilka linijek do listy web.config. Zajmuje się już bardzo egzotycznymi i rzadkimi przypadkami i wyjątkami. Możesz dodać wykluczenia do swojego pliku web.config, nie bazując na rozszerzeniach plików (jak w IIS6), ale na typie MIME, który prawdopodobnie jest dokładnie tym, czego potrzebujesz.

Należy dodać, że faktycznie korzystam z witryny ASP.NET MVC na IIS6 przy użyciu tej biblioteki, więc mogę potwierdzić, że działa to w praktyce.

+0

, więc czy lepiej użyć czegoś takiego i wyłączyć pliki, których nie chcę - takie jak JPEG, SWF? inną alternatywą jest inne pytanie, które zadałem: http: // stackoverflow.com/questions/649409/can-you-apply-a-actionfilter-in-asp-net-mvc-on-every-action - i użyj tego dla CompressFilter –

+1

Poszedłbym z HttpModule, ponieważ utrzymuje twoje kontrolery w czystości, i będzie on stosowany do wszystkich żądań (z wyjątkiem wykluczonych typów mime, o których wspomniałeś), np. sol. Pliki CSS, statyczny HTML itp., Nie tylko żądania obsługiwane przez działania kontrolera. – realMarkusSchmidt

0

W config internetowej należy zarejestrować StaticFileHandler oraz moduł HTTP

<add verb="GET,HEAD,POST" path="*" type="[Web.Front.Modules].StaticFileHandler"/> 
<add name="HttpCompressionModule" type="[Web.Front.Modules].HttpCompressionModule"/> 

kodzie źródłowym znajdziesz here

Ale nie zapomnij, aby włączyć kompresję na IIS

+0

Link do kodu źródłowego jest martwy. – Mark

0

Oto jedna opcja, która Wydaje się, że działa dla mnie z MVC i IIS 6 przy użyciu mapowania wieloznacznego i adresów bez rozszerzenia:

  1. globalną kompresję dynamiczną i statyczną za pomocą narzędzia administracyjnego
  2. edytuj plik metababase.xml, aby plik HcScriptFileExtensions był pusty w CompressionSchemes. Spróbuje skompresować wszystko (w tym pliki jpg i gify).
  3. Wyłącz kompresję dynamiczną na poziomie folderu za pomocą właściwości DoDynamicCompression = "false". Zakłada to, że cała twoja statyczna zawartość to jeden katalog.
  4. Dodaj statyczne rozszerzenia plików, które chcesz skompresować (css, js, itp.) Do właściwości HcFileExtensions.

Jest to obejście problemu, ale utknąłem na razie na Server 2003 i IIS 6.