Vorrei offrire una risposta alternativa, con un po 'di storia, in modo che tu possa capire perché Kestrel arriva, anche se usi solo Windows e IIS.
All'inizio dello sviluppo di ASP.NET prima dell'anno 2000, chiaramente Microsoft ha creato due pezzi per ospitare le app Web.Forms ASP.NET,
- Cassini, in seguito divenne ASP.NET Development Server in Visual Studio. È un server web completamente gestito scritto in C # basato su
HttpListener
. Naturalmente, poiché era solo per lo sviluppo, molte funzionalità non sono mai state implementate. Poiché Microsoft ha reso disponibile il codice sorgente di Cassini per il pubblico, ci sono terze parti che hanno biforcato la base di codice e aggiunto ulteriori funzionalità, dando vita alla famiglia Cassini.
- Supporto ASP.NET su IIS (revisione 1). Poiché IIS era 4.0 e 5.0 / 5.1 in quel momento, che non ha nulla come i pool di applicazioni, ASP.NET ha persino il suo processo di lavoro (
aspnet_wp.exe
).
Quindi per sviluppare un'app Web, usi Cassini e per distribuire usi IIS.
L'introduzione di pool di applicazioni in IIS 6 ha richiesto alcune modifiche sul lato ASP.NET, quindi è aspnet_wp.exe
diventato obsoleto e sostituito da aspnet_isapi.dll
. Questo può essere visto come supporto ASP.NET sulla revisione IIS 2. Quindi le app ASP.NET sono ospitate nei processi di lavoro IIS w3wp.exe
.
L'introduzione della pipeline integrata in IIS 7 e versioni successive ha richiesto ulteriori modifiche, che sono state sostituite aspnet_isapi.dll
da webengine4.dll
. Questo può essere visto come supporto ASP.NET sulla revisione IIS 3. Le pipeline ASP.NET e IIS sono unificate.
Puoi vedere ASP.NET che è diventato molto più complesso e strettamente integrato con IIS, quindi Cassini ha iniziato a mostrare la sua età e gradualmente è stato sostituito da IIS Express (IIS Lite in modalità utente).
Pertanto, in molti casi, quando le persone danno la colpa a IIS è lento, in realtà dovrebbero dare la colpa a ASP.NET. Lo stesso IIS senza ASP.NET è piuttosto veloce e stabile, mentre ASP.NET non è stato sviluppato tenendo conto delle metriche prestazionali sufficienti (poiché WebForms focalizza un sacco di produttività e RAD).
Quindi, nel novembre 2014, è stato annunciato ASP.NET 5 (in seguito ribattezzato ASP.NET Core) che è diventato una tecnologia multipiattaforma. Ovviamente Microsoft aveva bisogno di un nuovo design per supportare Windows, macOS e Linux, in cui tutti i principali server Web, nginx / Apache (o altri server Web) dovrebbero essere considerati oltre a IIS.
Penso che molti sarebbero d'accordo sul fatto che Microsoft abbia imparato molto da NodeJS, e quindi progettato e sviluppato Kestrel (basato libuv
inizialmente ma potrebbe presto passare ad altre tecnologie). Inizialmente si tratta di un server Web leggero come Cassini, ma in seguito vengono aggiunte altre funzionalità (come un'altra risposta commentata, molte più funzionalità in modo che possano essere trattate come un server Web completo). Sebbene completamente gestito (esistono alcune dipendenze native), non è più un web server giocattolo come Cassini.
Allora perché non puoi semplicemente usare Kestrel? Perché IIS Express e potenzialmente IIS, nginx o Apache sono ancora necessari? Ciò è principalmente il risultato della pratica di Internet di oggi. La maggior parte dei siti Web utilizza proxy inversi per accettare le richieste dai browser Web e quindi inoltrarle ai server delle applicazioni in background.
- IIS Express / IIS / nginx / Apache sono i server proxy inverso
- Kestrel / NodeJS / Tomcat e così via sono i server delle applicazioni
Un'altra risposta ha già mostrato un collegamento alla documentazione di Microsoft, quindi puoi dare un'occhiata.
Microsoft ha sviluppato inizialmente HttpPlatformHandler per rendere IIS un proxy inverso abbastanza buono per Java / Python e così via, quindi ha pianificato di usarlo per ASP.NET Core. I problemi hanno iniziato a manifestarsi durante lo sviluppo, quindi in seguito Microsoft ha creato il modulo ASP.NET Core appositamente per ASP.NET Core. Questo è il supporto ASP.NET sulla revisione 4 di IIS.
A partire da ASP.NET Core 2.2, ASP.NET Core Module per IIS (versione 2) può ospitare l'ambiente .NET Core all'interno del processo di lavoro IIS ( w3wp.exe
), abbastanza simile a ASP.NET 2.x / 4.x. Questa modalità è denominata "hosting in-process IIS" . Può essere considerato come supporto ASP.NET sulla revisione 5 di IIS.
Bene, piuttosto lungo, ma spero di aver messo insieme tutti i pezzi necessari e ti diverti a leggerlo.