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?
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?
Odpowiedzi:
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 HttpModule
ma w zasadzie prawie tyle samo mocy, co filtr ISAPI, a ASP.NET HttpHandler
może mieć prawie taką samą moc, jak mogłoby to mieć rozszerzenie ISAPI. W tym trybie ASP.NET jest zasadniczo częścią IIS.
HttpModules
metodami / zdarzeniami w iis7
ma większą funkcjonalność niż w iis6
? możesz to rozwinąć?
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
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 modules
i ASP.NET modules
zapewniając przetwarzanie żądań na wszystkich etapach. Z tego powodu moduły .NET mogą obsługiwać typy treści NON ASP.NET (.html, pliki statyczne). .
IHttpModule
), które mają możliwość wykonywania dla całej zawartości aplikacji, oraz zapewniają rozszerzony zestaw usług przetwarzania żądań dla aplikacji.IHttpHandler
)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.