Was ist Turmfalke (vs IIS / Express)


158

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.Kestrelund 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 needKestrel verwende, aber es scheint keine Alternative zu geben - selbst die einfachsten Beispiele verwenden Kestrel.


Wenn Sie eine Frage zu dieser neuen Technologie haben, starten Sie auf der GitHub-Seite für die betreffenden Projekte und sehen Sie sich deren Wikis an. Sie würden auf diese Server-Wiki-Seite für das ASP.NET-Repo stoßen.
Maurer

11
Natürlich stößt man dann auf Sachen wie This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net. Hoppla.

Antworten:


115

Was ist Turmfalke?

Es ist ein ausgewachsener Webserver. Sie können Ihre ASP.NET Core-Anwendung nur mit Kestrel ausführen.

Wenn ich meine Website betreibe, wird weiterhin das IIS Express-Symbol in der Taskleiste angezeigt

In Ihrer ASP.NET-Anwendung, wahrscheinlich im wwwrootVerzeichnis, wird eine web.config angezeigt, die Folgendes enthält:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
    <handlers>
    <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
    </handlers>
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>

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.


5
Hervorragende Einführung in das, was genau unter der Decke vor
user99513

4
Diese Antwort ist aufgrund der Einführung des ASP.NET-Kernmoduls (anstelle von HttpPlatformHandler) etwas veraltet. Ich bot eine alternative Antwort mit mehr Geschichten und verwandten Produkten an.
Lex Li

171

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.exewurde 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.dllmit 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 libuvanfä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.


1
Gute Antwort. Man kann jedoch nicht einfach sagen, dass die Verwendung von Turmfalke mit IIS "das Ergebnis der heutigen Internetpraxis" ist. Es gibt viele Gründe für die Verwendung eines Reverse-Proxys. Wäre gut gewesen, hier einige zu erwähnen.
Nilay Vishwakarma

13
"Es gibt viele Gründe für die Verwendung eines Reverse-Proxys" gehört zu seiner eigenen Frage und Antwort. Normalerweise können Leute gute Ressourcen finden, indem sie Google fragen, deshalb habe ich das nicht an diese bereits lange genug Antwort angehängt.
Lex Li

12

Aus den ms-Dokumenten unter: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel ist ein plattformübergreifender Webserver für ASP.NET Core, der auf libuv basiert, einer plattformübergreifenden asynchronen E / A-Bibliothek. Kestrel ist der Webserver, der standardmäßig in ASP.NET Core-Projektvorlagen enthalten ist.

Sie können Kestrel alleine oder mit einem Reverse-Proxy-Server wie IIS, Nginx oder Apache verwenden. Ein Reverse-Proxy-Server empfängt HTTP-Anforderungen aus dem Internet und leitet sie nach einer vorläufigen Bearbeitung an Kestrel weiter.


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

Mit der Veröffentlichung von ASP.NET Core 2.1 basiert der Standardtransport von Kestrel nicht mehr auf Libuv, sondern auf verwalteten Sockets.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.