Co to jest serwer WWW Kestrel i jaki ma związek z usługami IIS / IIS Express?
Pochodzę z tworzenia aplikacji w IIS Express i hostowania ich na serwerze internetowym IIS. W przypadku ASP.NET Core mam zależność od Microsoft.AspNetCore.Server.Kestrel
i mój startup ma .UseServer("Microsoft.AspNetCore.Server.Kestrel")
. Ale kiedy uruchamiam moją witrynę internetową, nadal widzę ikonę IIS Express na pasku zadań. Ktoś zapytał mnie, czy używam IIS Express czy Kestrel i nie wiedziałem, co powiedzieć!
Nie mam żadnych wymagań dotyczących wielu platform, ponieważ programuję na komputerze PC i hostuję na platformie Azure, więc jestem zdezorientowany, jeśli nawet need
Kestrel, ale nie wydaje się, że istnieje alternatywa - nawet najprostsze próbki używają Kestrel.
This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net
. Ups.Odpowiedzi:
To w pełni rozwinięty serwer WWW. Możesz uruchomić aplikację ASP.NET Core przy użyciu samego Kestrel.
W aplikacji ASP.NET, prawdopodobnie w
wwwroot
katalogu, zobaczysz plik web.config, który zawiera to:To jest HttpPlatformHandler. Zasadniczo to, co to robi, to przekazywanie wszystkich żądań do Kestrel. IIS Express (i IIS w tym przypadku) nie będą już same uruchamiać ASP.NET. Zamiast tego będą działać jako proxy, które po prostu przekazują żądania i odpowiedzi od Kestrel. Nadal istnieją zalety korzystania z usług IIS, w szczególności zapewnia konfigurację zabezpieczeń, buforowanie na poziomie jądra itp.
źródło
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,
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.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 przezaspnet_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 IISw3wp.exe
.Wprowadzenie zintegrowanego rurociągu IIS 7 i powyżej wymagane dalsze zmiany, które otrzymuje
aspnet_isapi.dll
się zwebengine4.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.
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.
źródło
Z ms docs pod adresem : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
UPDATE: .net core 2.1, Kestrel używa zarządzanych gniazd zamiast libuv
Z dokumentacji asp.net core 2.1 pod adresem : https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration
źródło