Was ist der Turmfalken-Webserver und in welcher Beziehung steht er zu IIS / IIS Express?
Ich komme aus der Entwicklung von Apps auf IIS Express und dem Hosten auf einem IIS-Webserver. Mit ASP.NET Core habe ich eine Abhängigkeit von Microsoft.AspNetCore.Server.Kestrel
und mein Start hat .UseServer("Microsoft.AspNetCore.Server.Kestrel")
. Wenn ich meine Website betreibe, wird weiterhin das IIS Express-Symbol in der Taskleiste angezeigt. Jemand fragte mich, ob ich IIS Express oder Kestrel verwende und ich wusste nicht, was ich sagen soll!
Ich habe keine plattformübergreifenden Anforderungen, da ich auf einem PC und einem Host in Azure entwickle. Daher bin ich verwirrt, wenn ich überhaupt need
Kestrel verwende, aber es scheint keine Alternative zu geben - selbst die einfachsten Beispiele verwenden Kestrel.
This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net
. Hoppla.Antworten:
Es ist ein ausgewachsener Webserver. Sie können Ihre ASP.NET Core-Anwendung nur mit Kestrel ausführen.
In Ihrer ASP.NET-Anwendung, wahrscheinlich im
wwwroot
Verzeichnis, wird eine web.config angezeigt, die Folgendes enthält:Dies ist der HttpPlatformHandler. Dies leitet im Wesentlichen alle Anfragen an Kestrel weiter. IIS Express (und IIS) führen ASP.NET nicht mehr selbst aus. Stattdessen fungieren sie als Proxys, die einfach Anfragen und Antworten von Kestrel hin und her leiten. Die Verwendung von IIS bietet immer noch Vorteile, insbesondere bietet es Ihnen Sicherheitskonfiguration, Caching auf Kernel-Ebene usw.
quelle
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.
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.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 ersetztaspnet_isapi.dll
. Dies kann als ASP.NET-Unterstützung in IIS-Version 2 angesehen werden. Daher werden ASP.NET-Apps in IIS-Arbeitsprozessen gehostetw3wp.exe
.Die Einführung von integrierten Pipeline in IIS 7 und höher erforderlich , weiteren Änderungen, die ersetzt
aspnet_isapi.dll
mitwebengine4.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.
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.
quelle
Aus den ms-Dokumenten unter: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
UPDATE: .net Core 2.1, Kestrel verwendet stattdessen verwaltete Sockets, wenn libuv
Aus asp.net Core 2.1-Dokumenten unter: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration
quelle