Mi piacerebbe offrire una risposta alternativa, con un po 'di storia, in modo da poter capire perché Kestrel arriva, anche se si utilizza solo Windows e IIS.
All'inizio dello sviluppo ASP.NET prima del 2000, chiaramente Microsoft ha creato due pezzi di ospitare ASP.NET WebForms applicazioni,
- Cassini, in seguito divenne ASP.NET Development Server in Visual Studio. Si tratta di 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.Dato che Microsoft ha reso disponibile per il pubblico il codice sorgente di Cassini, ci sono terze parti che hanno biforcato il codice base e aggiunto altre funzionalità, che hanno dato 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 anche il proprio processo di lavoro (
aspnet_wp.exe
).
Quindi, per sviluppare un'app Web, si utilizza Cassini e per distribuire si utilizza IIS.
L'introduzione dei pool di applicazioni in IIS 6 richiesto alcuni cambiamenti sul lato ASP.NET, quindi aspnet_wp.exe
è diventato obsoleto e sostituito da aspnet_isapi.dll
. Questo può essere visto come supporto ASP.NET nella revisione di 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 successive ha richiesto ulteriori modifiche, che hanno sostituito aspnet_isapi.dll
con webengine4.dll
. Questo può essere visto come supporto ASP.NET sulla revisione di IIS 3. Le pipeline ASP.NET e IIS sono unificate.
potete vedere ASP.NET è diventata molto più complessa e strettamente integrato con IIS, in modo da Cassini ha cominciato a mostrare la sua età, e gradualmente è stato sostituito da IIS Express (una modalità utente lite IIS).
Quindi, in molti casi, quando le persone danno la colpa a ASP.NET è lento, dovrebbero biasimare ASP.NET in effetti. IIS stesso senza ASP.NET è abbastanza veloce e stabile, mentre ASP.NET non è stato sviluppato con in mente abbastanza metriche prestazionali (dato che WebForms concentra un buon numero di produttività e RAD).
Successivamente, nel mese di novembre 2014, è stato annunciato ASP.NET 5 (successivamente rinominato in ASP.NET Core) ed è diventato una tecnologia multipiattaforma. Ovviamente Microsoft non può più legarlo a IIS. Quindi il nuovo design deve considerare macOS e Linux, dove dovrebbero essere usati nginx/Apache o altri server web.
credo che molti sarebbero d'accordo che Microsoft ha imparato un bel po 'da NodeJS, e quindi progettato e sviluppato Kestrel (sulla base di libuv
inizialmente, ma potrebbe passare ad altre tecnologie a breve). Si tratta di un server Web leggero come Cassini inizialmente, ma in seguito verranno aggiunte altre funzionalità (come un'altra risposta commentata, molte più funzionalità possono essere considerate come un server web completo). Sebbene sia completamente gestito (esistono alcune dipendenze native), non è più un server web giocattolo come Cassini.
Allora perché non puoi semplicemente usare Kestrel? Perché IIS Express e potenzialmente IIS, nginx o Apache sono ancora necessari? Questo è principalmente il risultato della pratica di internet di oggi. La maggior parte dei siti Web utilizza proxy inversi per ricevere richieste dai browser Web e quindi inoltrare ai server delle applicazioni in background.
- IIS espresso/IIS/nginx/Apache sono i server proxy inverso
- Kestrel/NodeJS/Tomcat e così via sono i server applicativi
Un'altra risposta già mostrato un link alla documentazione di Microsoft, così puoi dare un'occhiata.
Microsoft ha sviluppato HttpPlatformHandler inizialmente per rendere IIS un proxy inverso abbastanza buono per Java/Python e così via, quindi è intenzionato a utilizzarlo per ASP.NET Core. I problemi hanno iniziato a comparire durante lo sviluppo, quindi in seguito Microsoft ha creato il modulo principale ASP.NET appositamente per ASP.NET Core. Questo è il supporto di ASP.NET sulla revisione 4 di IIS.
Beh, piuttosto lungo, ma spero di mettere insieme tutti i pezzi necessari e ti piace leggerlo.
Quando hai una domanda su questa nuova tecnologia, inizia dalla pagina GitHub per i progetti in questione e dai un'occhiata ai loro Wiki. Ti imbatterai nella pagina wiki di [Server] (https://github.com/aspnet/Home/wiki/Servers) per il repository ASP.NET. – mason
Ovviamente, ti imbatti in cose del tipo 'Questo documento non è aggiornato. Per la documentazione aggiornata su ASP.NET Core andare su: http: // docs.asp.net'. Ops. – hacksalot