Chciałbym zaoferować alternatywną odpowiedź, z pewną historią, abyś mógł zrozumieć, dlaczego pojawia się Kestrel, nawet jeśli używasz tylko systemu Windows i IIS.
Na samym początku rozwoju ASP.NET przed 2000 rokiem Microsoft najwyraźniej stworzył dwie części do hostowania aplikacji ASP.NET WebForms,
- Cassini, później stał się serwerem programistycznym ASP.NET w programie Visual Studio. Jest to w pełni zarządzany serwer WWW napisany w C # w oparciu o
HttpListener
. Oczywiście, ponieważ był przeznaczony tylko do programowania, wiele funkcji nigdy nie zostało zaimplementowanych. Gdy Microsoft udostępnił publicznie kod źródłowy Cassini, istnieją strony trzecie, które rozwidliły bazę kodu i dodały więcej funkcji, co zapoczątkowało rodzinę Cassini.
- Obsługa ASP.NET w IIS (wersja 1). Ponieważ IIS był w tamtym czasie 4.0 i 5.0 / 5.1, który nie ma nic podobnego do pul aplikacji, ASP.NET ma nawet własny proces roboczy (
aspnet_wp.exe
).
Tak więc do tworzenia aplikacji sieci Web używasz Cassini, a do wdrażania korzystasz z IIS.
Wprowadzenie pul aplikacji w usługach IIS 6 wymagało pewnych zmian po stronie ASP.NET, dlatego aspnet_wp.exe
stało się przestarzałe i zastąpione przez aspnet_isapi.dll
. Można to postrzegać jako obsługę ASP.NET w wersji IIS IIS. Dlatego aplikacje ASP.NET są hostowane w procesach roboczych usług IIS w3wp.exe
.
Wprowadzenie zintegrowanego rurociągu IIS 7 i powyżej wymagane dalsze zmiany, które otrzymuje aspnet_isapi.dll
się z webengine4.dll
. Można to postrzegać jako obsługę ASP.NET w wersji 3 usług IIS. Potoki ASP.NET i IIS są ujednolicone.
Widać, że ASP.NET stał się znacznie bardziej złożony i ściśle zintegrowany z IIS, więc Cassini zaczął pokazywać swój wiek i stopniowo został zastąpiony przez IIS Express (lite IIS w trybie użytkownika).
Dlatego w wielu przypadkach, gdy ludzie obwiniają, że usługi IIS działają wolno, w rzeczywistości powinni winić ASP.NET. Same IIS bez ASP.NET są dość szybkie i stabilne, podczas gdy ASP.NET nie został opracowany z myślą o wystarczających wskaźnikach wydajności (ponieważ WebForms skupia się na dużej produktywności i RAD).
Następnie w listopadzie 2014 r. Ogłoszono ASP.NET 5 (później zmieniono nazwę na ASP.NET Core) i stał się technologią wieloplatformową. Oczywiście Microsoft potrzebował nowego projektu do obsługi systemów Windows, macOS i Linux, gdzie oprócz IIS należy wziąć pod uwagę wszystkie główne serwery internetowe, nginx / Apache (lub inne serwery internetowe).
Myślę, że wielu zgodziłoby się, że Microsoft wiele się nauczył od NodeJS, a następnie zaprojektował i opracował Kestrel (w oparciu o libuv
początkowo, ale wkrótce może przejść na inną technologię). Jest to początkowo lekki serwer sieciowy, taki jak Cassini, ale później dodaje się więcej funkcji (jak inna skomentowana odpowiedź, znacznie więcej funkcji, więc można go traktować jako pełny serwer sieciowy). Chociaż jest w pełni zarządzany (istnieją pewne natywne zależności), nie jest już zabawkowym serwerem WWW, takim jak Cassini.
Więc dlaczego nie możesz po prostu użyć Kestrel? Dlaczego IIS Express i potencjalnie IIS, nginx lub Apache są nadal potrzebne? Wynika to przede wszystkim z dzisiejszej praktyki internetowej. Większość witryn internetowych korzysta z odwrotnych serwerów proxy, aby przyjmować żądania z przeglądarek internetowych, a następnie przekazywać je do serwerów aplikacji w tle.
- IIS Express / IIS / nginx / Apache to odwrotne serwery proxy
- Kestrel / NodeJS / Tomcat i tak dalej to serwery aplikacji
Inna odpowiedź zawierała już link do dokumentacji Microsoft, więc możesz rzucić okiem.
Firma Microsoft opracowała HttpPlatformHandler początkowo, aby usługi IIS były wystarczająco dobrym zwrotnym serwerem proxy dla języka Java / Python i tak dalej, więc zaplanowano użycie go dla ASP.NET Core. Podczas opracowywania zaczęły pojawiać się problemy, więc później firma Microsoft stworzyła moduł ASP.NET Core specjalnie dla ASP.NET Core. To jest obsługa ASP.NET w wersji 4 usług IIS.
Począwszy od ASP.NET Core 2.2, moduł ASP.NET Core dla usług IIS (wersja 2) może hostować środowisko .NET Core wewnątrz procesu roboczego usług IIS ( w3wp.exe
), podobnie jak w przypadku ASP.NET 2.x / 4.x. Ten tryb jest nazywany „hostowaniem w procesie usług IIS” . Można to uznać za obsługę ASP.NET w wersji 5 usług IIS.
Cóż, dość długi, ale mam nadzieję, że poskładam wszystkie niezbędne elementy i sprawi ci przyjemność lektura.