Jaka jest różnica między „klasycznym” a „zintegrowanym” trybem potoku w IIS7?

490

Wczoraj wdrażałem aplikację ASP.NET MVC i dowiedziałem się, że wdrażanie z IIS7 ustawionym na tryb zintegrowany jest mniej pracochłonne. Moje pytanie brzmi, jaka jest różnica? Jakie są konsekwencje korzystania z jednego lub drugiego?

Jon Erickson
źródło
10
Jak mniej pracowało się przy wdrażaniu w trybie zintegrowanym w porównaniu z klasycznym? Po prostu ciekawy
Peter Lillevold,
9
@Peter: URL-e bez rozszerzenia wymagają ręcznego mapowania w trybie klasycznym.
Mehrdad Afshari,
2
nawet w MVC Global.asax uwagi brzmią: Aby uzyskać instrukcje dotyczące włączania trybu klasycznego IIS6 lub IIS7, odwiedź go.microsoft.com/?LinkId=9394801 . Lub możesz po prostu włączyć tryb zintegrowany i dołączyć zestaw System.Web.Mvc i wszystko po prostu działa.
Jon Erickson

Odpowiedzi:

642

Tryb klasyczny (jedyny tryb w IIS6 i niższych) to tryb, w którym IIS działa tylko z rozszerzeniami ISAPI i filtrami ISAPI. W rzeczywistości w tym trybie ASP.NET jest tylko rozszerzeniem ISAPI (aspnet_isapi.dll) i filtrem ISAPI (aspnet_filter.dll). IIS po prostu traktuje ASP.NET jako zewnętrzną wtyczkę zaimplementowaną w ISAPI i działa z nią jak z czarną skrzynką (i tylko wtedy, gdy musi wysłać żądanie do ASP.NET). W tym trybie ASP.NET niewiele różni się od PHP lub innych technologii IIS.

Z kolei tryb zintegrowany to nowy tryb w IIS7, w którym potok IIS jest ściśle zintegrowany (tzn. Jest taki sam) jak potok żądań ASP.NET. ASP.NET może zobaczyć każde żądanie i manipulować po drodze. ASP.NET nie jest już traktowany jako zewnętrzna wtyczka. Jest całkowicie mieszany i zintegrowany z IIS. W tym trybie ASP.NET HttpModulema w zasadzie prawie tyle samo mocy, co filtr ISAPI, a ASP.NET HttpHandlermoże mieć prawie taką samą moc, jak mogłoby to mieć rozszerzenie ISAPI. W tym trybie ASP.NET jest zasadniczo częścią IIS.

Mehrdad Afshari
źródło
8
jest zintegrowany wolniej niż klasyczny?
Alex Nolasco,
Nie jestem pewien, czy słuszne jest twierdzenie, że asp.net jest częścią IIS. Wyglądają jak oddzielne (choć zintegrowane) produkty. Mogę się mylić.
Andrew Savinykh,
@MehrdadAfshari Czy radzenie sobie z HttpModulesmetodami / zdarzeniami w iis7ma większą funkcjonalność niż w iis6? możesz to rozwinąć?
Royi Namir
I dodając, w trybie zintegrowanego potoku każdy etap w potoku żądania jest ujawniany jako zdarzenie, które można zastąpić mapowaniem procedur obsługi w aplikacji. Na przykład można zdefiniować osadzony zasób HttpHandler dla określonych rodzajów tras i zamapować je na niestandardowy moduł obsługi za pomocą modułu obsługi trasy.
Ren
1
Idealna odpowiedź na takie pytanie, powinna przynajmniej odnosić się do jednego z artykułów Microsoft, takich jak iis.net/learn/application-frameworks/… .
Lex Li
115

Tryb zintegrowanej puli aplikacji

Gdy pula aplikacji jest w trybie zintegrowanym, możesz skorzystać ze zintegrowanej architektury przetwarzania żądań usług IIS i ASP.NET. Gdy proces roboczy w puli aplikacji odbiera żądanie, żądanie przechodzi przez uporządkowaną listę zdarzeń. Każde zdarzenie wywołuje niezbędne moduły macierzyste i zarządzane w celu przetworzenia części żądania i wygenerowania odpowiedzi.

Istnieje kilka korzyści z uruchamiania pul aplikacji w trybie zintegrowanym. Najpierw modele przetwarzania żądań IIS i ASP.NET są zintegrowane w ujednoliconym modelu procesu. Ten model eliminuje kroki, które zostały wcześniej zduplikowane w IIS i ASP.NET, takie jak uwierzytelnianie. Ponadto tryb zintegrowany umożliwia dostępność funkcji zarządzanych do wszystkich typów treści.

Klasyczny tryb puli aplikacji

Gdy pula aplikacji jest w trybie klasycznym, IIS 7.0 obsługuje żądania jak w trybie izolacji procesu roboczego IIS 6.0. Żądania ASP.NET najpierw przechodzą przez rodzime kroki przetwarzania w IIS, a następnie są kierowane do Aspnet_isapi.dll w celu przetworzenia kodu zarządzanego w zarządzanym środowisku wykonawczym. Wreszcie żądanie jest kierowane z powrotem przez IIS w celu wysłania odpowiedzi.

To rozdzielenie modeli przetwarzania żądań IIS i ASP.NET powoduje powielenie niektórych etapów przetwarzania, takich jak uwierzytelnianie i autoryzacja. Ponadto funkcje kodu zarządzanego, takie jak uwierzytelnianie formularzy, są dostępne tylko dla aplikacji ASP.NET lub aplikacji, dla których skrypt zmapował wszystkie żądania obsługiwane przez aspnet_isapi.dll.

Należy przetestować istniejące aplikacje pod kątem zgodności w trybie zintegrowanym przed aktualizacją środowiska produkcyjnego do IIS 7.0 i przypisaniem aplikacji do pul aplikacji w trybie zintegrowanym. Aplikację należy dodać do puli aplikacji w trybie klasycznym tylko wtedy, gdy aplikacja nie działa w trybie zintegrowanym. Na przykład aplikacja może polegać na tokenie uwierzytelniającym przekazywanym z IIS do zarządzanego środowiska wykonawczego, a ze względu na nową architekturę w IIS 7.0 proces psuje aplikację.

Zaczerpnięte z: Jaka jest różnica między DefaultAppPool a Classic .NET AppPool w IIS7?

Oryginalne źródło: Wprowadzenie do architektury IIS

BrainCoder
źródło
28
Kluczowe zdanie w ostatnim akapicie: „Aplikację należy dodać do puli aplikacji w trybie klasycznym tylko wtedy, gdy aplikacja nie działa w trybie zintegrowanym”.
DavidRR
6
@JsonStatham - Jednym z powodów tego jest to, że Tryb Zintegrowany nie może korzystać z personifikacji ASP.NET (Witryny> Twoja Strona> IIS> Uwierzytelnianie). Jeśli masz witrynę intranetową i korzystasz z uwierzytelniania systemu Windows, jest to ważna kwestia. link
user3308241
11

IIS 6.0 i wcześniejsze wersje:

ASP.NET zintegrowany z IIS poprzez rozszerzenie ISAPI, C API (API oparte na języku programowania C) i ujawnił swój własny model przetwarzania aplikacji i żądań.

To skutecznie odsłoniło dwa oddzielne potoki serwera (żądanie / odpowiedź), jeden dla natywnych filtrów ISAPI i komponentów rozszerzenia, a drugi dla komponentów aplikacji zarządzanych. Komponenty ASP.NET działałyby całkowicie wewnątrz bąbelka rozszerzenia ISAPI ASP.NET I TYLKO dla żądań mapowanych na ASP.NET w konfiguracji mapowania skryptów IIS.

Żądania dotyczące typów treści innych niż ASP.NET: - obrazy, pliki tekstowe, strony HTML i strony ASP bez skryptów zostały przetworzone przez IIS lub inne rozszerzenia ISAPI i NIE były widoczne dla ASP.NET.

Głównym ograniczeniem tego modelu było to, że usługi dostarczane przez moduły ASP.NET i niestandardowy kod aplikacji ASP.NET NIE były dostępne dla żądań innych niż ASP.NET

Co to jest MAPA SKRYPTU?

Mapy skryptów służą do kojarzenia rozszerzeń plików z procedurą obsługi ISAPI, która jest wykonywana, gdy żądany jest ten typ pliku. Mapa skryptów ma również opcjonalne ustawienie, które weryfikuje, czy plik fizyczny powiązany z żądaniem istnieje przed umożliwieniem przetworzenia żądania

Dobrym przykładem może być seen here

IIS 7 i nowsze

Usługi IIS 7.0 i nowsze zostały przeprojektowane od podstaw, aby zapewnić zupełnie nowy interfejs ISAPI oparty na interfejsie C ++ API.

IIS 7.0 i nowsze wersje integrują środowisko wykonawcze ASP.NET z podstawową funkcjonalnością serwera WWW, zapewniając ujednolicony (pojedynczy) potok przetwarzania przetwarzania, który jest eksponowany zarówno dla komponentów rodzimych, jak i zarządzanych, zwanych modułami (IHttpModules)

Oznacza to, że IIS 7 przetwarza żądania przychodzące dla dowolnego typu treści, zarówno z, jak NON ASP.NET Modules / native IIS modulesi ASP.NET moduleszapewniając przetwarzanie żądań na wszystkich etapach. Z tego powodu moduły .NET mogą obsługiwać typy treści NON ASP.NET (.html, pliki statyczne). .

  • Możesz budować nowe moduły zarządzane ( IHttpModule), które mają możliwość wykonywania dla całej zawartości aplikacji, oraz zapewniają rozszerzony zestaw usług przetwarzania żądań dla aplikacji.
  • Dodaj nowe zarządzane moduły obsługi ( IHttpHandler)
RC
źródło
5

W trybie klasycznym IIS działa bezpośrednio z rozszerzeniami ISAPI i filtrami ISAPI. I używa dwóch linii potoku, jednej dla kodu natywnego, a drugiej dla kodu zarządzanego. Można po prostu powiedzieć, że w trybie klasycznym IIS 7.x działa tak samo jak IIS 6 i nie ma dodatkowych korzyści z funkcji IIS 7.x.

W trybie zintegrowanym usługi IIS i ASP.Net są ściśle powiązane, a nie tylko w oparciu o dwie biblioteki DLL w Asp.net, jak w przypadku trybu klasycznego.

Mian
źródło