2016-02-25 19 views
55

Qual è il server web Gheppio e come si relaziona a IIS/IIS Express?Qual è Kestrel (vs IIS/espresso)

vengo dal lo sviluppo di applicazioni su IIS Express e li hosting su un server Web IIS. Con ASP.NET Core ho una dipendenza su Microsoft.AspNetCore.Server.Kestrel e il mio avvio ha .UseServer("Microsoft.AspNetCore.Server.Kestrel"). Ma quando eseguo il mio sito Web, ho ancora l'icona di IIS Express nella barra delle applicazioni. Qualcuno mi ha chiesto se stavo usando IIS Express o Kestrel e non sapevo cosa dire!

Non ho alcun requisito multipiattaforma come sviluppo su PC e host in Azure, quindi sono confuso se anche io ho un problema con need Kestrel, ma non sembra che ci sia un'alternativa - anche la più semplice i campioni usano Kestrel.

+0

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

+2

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

risposta

56

Qual è Kestrel

Si tratta di un completo web server soffiato. È possibile eseguire l'applicazione ASP.NET Core utilizzando solo Kestrel.

Ma quando eseguo il mio sito web, ho ancora l'icona IIS Express nella barra di sistema

in un'applicazione ASP.NET, probabilmente nella directory wwwroot, vedrete un web. config che contiene questo:

<?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> 

Questo è HttpPlatformHandler. In sostanza, ciò che fa è in avanti tutte le richieste a Kestrel. IIS Express (e IIS per quella materia) non eseguiranno più ASP.NET da soli. Invece, agiranno come proxy che semplicemente passano richieste e risposte da Kestrel. C'è ancora vantaggi di utilizzare IIS, in particolare ti dà configurazione di sicurezza, a livello di kernel nella cache, ecc

+0

introduzione eccellente a ciò che accade esattamente sotto le copertine quando si utilizza il nucleo ASP.Net https://youtu.be/e2qZvabmSvo – user99513

+0

Questa risposta è un po 'obsoleta a causa dell'introduzione del modulo principale ASP.NET (invece di HttpPlatformHandler). Ho offerto una risposta alternativa con più storie e prodotti correlati. –

1

da MS docs a: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

Kestrel è un web server multi-piattaforma per ASP. NET Core basato su libuv , una libreria I/O asincrona multipiattaforma. Kestrel è il server Web incluso per impostazione predefinita nei modelli di progetto ASP.NET Core.

È possibile utilizzare Kestrel da solo o con un server proxy inverso, ad esempio IIS, Nginx o Apache. Un server proxy inverso riceve richieste HTTP da Internet e li inoltra al Kestrel dopo qualche preliminare movimentazione .

13

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.

Problemi correlati