Ich möchte eine alternative Antwort mit einer gewissen Historie anbieten, damit Sie verstehen, warum Kestrel kommt, auch wenn Sie nur Windows und IIS verwenden.
Zu Beginn der ASP.NET-Entwicklung vor dem Jahr 2000 hat Microsoft eindeutig zwei Teile zum Hosten von ASP.NET WebForms-Apps erstellt.
- Cassini wurde später ASP.NET Development Server in Visual Studio. Es ist ein vollständig verwalteter Webserver, der in C # basierend auf geschrieben wurde
HttpListener
. Da es sich nur um Entwicklungszwecke handelte, wurden viele Funktionen natürlich nie implementiert. Als Microsoft den Quellcode von Cassini für die Öffentlichkeit zugänglich machte, gab es Dritte, die die Codebasis gespalten und weitere Funktionen hinzugefügt haben, wodurch die Cassini-Familie gegründet wurde.
- ASP.NET-Unterstützung unter IIS (Version 1). Da IIS zu diesem Zeitpunkt 4.0 und 5.0 / 5.1 war, was nichts mit Anwendungspools zu tun hat, verfügt ASP.NET sogar über einen eigenen Arbeitsprozess (
aspnet_wp.exe
).
Um eine Web-App zu entwickeln, verwenden Sie Cassini und für die Bereitstellung verwenden Sie IIS.
Die Einführung von Anwendungspools in IIS 6 erforderte einige Änderungen auf der ASP.NET-Seite, aspnet_wp.exe
wurde also veraltet und durch ersetzt aspnet_isapi.dll
. Dies kann als ASP.NET-Unterstützung in IIS-Version 2 angesehen werden. Daher werden ASP.NET-Apps in IIS-Arbeitsprozessen gehostet w3wp.exe
.
Die Einführung von integrierten Pipeline in IIS 7 und höher erforderlich , weiteren Änderungen, die ersetzt aspnet_isapi.dll
mit webengine4.dll
. Dies kann als ASP.NET-Unterstützung in IIS-Version 3 angesehen werden. ASP.NET- und IIS-Pipelines sind vereinheitlicht.
Sie können sehen, dass ASP.NET viel komplexer und enger in IIS integriert wurde, sodass Cassini begann, sein Alter zu zeigen, und allmählich durch IIS Express (ein Benutzermodus-Lite-IIS) ersetzt wurde.
In vielen Fällen sollten Benutzer, die IIS als langsam bezeichnen, tatsächlich ASP.NET beschuldigen. IIS selbst ohne ASP.NET ist ziemlich schnell und stabil, während ASP.NET nicht mit ausreichenden Leistungsmetriken entwickelt wurde (da WebForms viele Produktivitäten und RADs fokussiert).
Im November 2014 wurde dann ASP.NET 5 (später in ASP.NET Core umbenannt) angekündigt und zu einer plattformübergreifenden Technologie. Offensichtlich benötigte Microsoft ein neues Design zur Unterstützung von Windows, MacOS und Linux, bei dem alle wichtigen Webserver, Nginx / Apache (oder andere Webserver) neben IIS berücksichtigt werden sollten.
Ich denke, viele würden zustimmen, dass Microsoft viel von NodeJS gelernt und dann Kestrel entworfen und entwickelt hat (basierend auf libuv
anfänglich, aber möglicherweise bald auf andere Technologien umgestellt ). Es ist anfangs ein leichter Webserver wie Cassini, aber später werden weitere Funktionen hinzugefügt (wie eine andere Antwort kommentiert, können viel mehr Funktionen als vollständiger Webserver behandelt werden). Obwohl vollständig verwaltet (einige native Abhängigkeiten bestehen), handelt es sich nicht mehr um einen Spielzeug-Webserver wie Cassini.
Warum kannst du dann nicht einfach Turmfalke benutzen? Warum werden IIS Express und möglicherweise IIS, Nginx oder Apache weiterhin benötigt? Dies ist in erster Linie ein Ergebnis der heutigen Internetpraxis. Die meisten Websites verwenden Reverse-Proxys, um Anforderungen von Ihren Webbrowsern entgegenzunehmen und dann im Hintergrund an die Anwendungsserver weiterzuleiten.
- IIS Express / IIS / nginx / Apache sind die Reverse-Proxy-Server
- Kestrel / NodeJS / Tomcat usw. sind die Anwendungsserver
In einer anderen Antwort wurde bereits ein Link zur Microsoft-Dokumentation angezeigt, sodass Sie einen Blick darauf werfen können.
Microsoft hat HttpPlatformHandler ursprünglich entwickelt, um IIS zu einem ausreichend guten Reverse-Proxy für Java / Python usw. zu machen. Daher war geplant, es für ASP.NET Core zu verwenden. Während der Entwicklung traten Probleme auf, sodass Microsoft später das ASP.NET Core-Modul speziell für ASP.NET Core entwickelte. Das ist ASP.NET-Unterstützung für IIS-Version 4.
Ab ASP.NET Core 2.2 kann das ASP.NET Core-Modul für IIS (Version 2) eine .NET Core-Umgebung innerhalb des IIS-Arbeitsprozesses ( w3wp.exe
) hosten , ähnlich wie ASP.NET 2.x / 4.x. Dieser Modus wird als "IIS-In-Process-Hosting" bezeichnet . Es kann als ASP.NET-Unterstützung in IIS Revision 5 betrachtet werden.
Nun, ziemlich lang, aber ich hoffe, ich habe alle notwendigen Teile zusammengestellt und Sie lesen es gerne.