Qu'est-ce que Kestrel (vs IIS / Express)

Qu'est-ce que le serveur web kestrel et comment se rapporte-t-il à IIS / IIS Express?

Je viens de développer des applications sur IIS Express et de les héberger sur un serveur web IIS. Avec ASP.NET Core j'ai une dépendance sur Microsoft.AspNetCore.Server.Kestrel et mon démarrage a .UseServer("Microsoft.AspNetCore.Server.Kestrel"). Mais quand je lance mon site web, Je reçois toujours L'icône IIS Express dans la barre d'état système. Quelqu'un m'a demandé si j'utilisais IIS Express ou crécerelle et je ne savais pas quoi dire!

Je n'ai pas d'exigences multi-plateforme que je développe sur un PC et hôte dans Azure, donc je suis confus si j'ai même need crécerelle, mais il ne semble pas qu'il y ait une alternative - même les échantillons les plus simples utilisent crécerelle.

76
demandé sur vcsjones 2016-02-26 00:58:03

3 réponses

Qu'est-ce que la crécerelle

C'est un serveur web complet. Vous pouvez exécuter votre ASP.NET application de base en utilisant juste crécerelle.

Mais quand je lance mon site web, Je reçois toujours L'icône IIS Express dans la barre d'état système

Dans votre ASP.NET application, probablement dans le répertoire wwwroot, vous verrez un web.config qui contient ceci:

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

C'est le HttpPlatformHandler. Essentiellement, ce que cela fait est de transmettre Toutes les requêtes à Kestrel. IIS Express (et IIS d'ailleurs) ne fonctionnera pas ASP.NET eux-mêmes plus. Au lieu de cela, ils agiront comme des proxies qui transmettent simplement les demandes et les réponses de Kestrel. Il y a encore des avantages à utiliser IIS, en particulier il vous donne la configuration de sécurité, la mise en cache au niveau du noyau, etc.

71
répondu vcsjones 2016-02-25 22:07:18

Je voudrais offrir une réponse alternative, avec un peu d'histoire, afin que vous puissiez comprendre pourquoi Kestrel vient, même si vous n'utilisez que Windows et IIS.

Au tout début de ASP.NET développement avant l'an 2000, Microsoft a clairement créé deux pièces pour accueillir ASP.NET applications WebForms,

  • Cassini, devenu plus tard ASP.NET serveur de développement dans Visual Studio. C'est un serveur web entièrement géré écrit en C# basé sur HttpListener. Bien sûr, puisque c'était pour le développement seulement, beaucoup les fonctionnalités n'ont jamais été implémentées. Comme Microsoft a rendu le code source de Cassini disponible pour le public, il y a des tiers qui ont fourchu la base de code et ajouté plus de fonctionnalités, ce qui a commencé la famille Cassini.
  • ASP.NET support sur IIS (Révision 1). Parce que IIS était 4.0 et 5.0 / 5.1 à ce moment-là, qui n'a rien comme les pools d'applications, ASP.NET même a son propre processus de travail (aspnet_wp.exe).

Donc, pour développer une application web, vous utilisez Cassini, et pour déployer vous utilisez IIS.

  • L'introduction de pools d'applications dans IIS 6 a nécessité quelques changements sur ASP.NET côté, donc aspnet_wp.exe est devenu obsolète et remplacé par aspnet_isapi.dll. Cela peut être considéré comme ASP.NET prise en charge de la révision IIS 2. Alors ASP.NET les applications sont hébergées dans des processus de travail IIS w3wp.exe.

  • L'introduction du pipeline intégré dans IIS 7 et au-dessus a nécessité d'autres changements, qui ont remplacé aspnet_isapi.dll par webengine4.dll. Cela peut être considéré comme ASP.NET prise en charge de la révision IIS 3. ASP.NET et IIS les pipelines sont unifiés.

Vous pouvez voir ASP.NET est devenu beaucoup plus complexe et étroitement intégré avec IIS, si Cassini a commencé à montrer son âge, et peu à peu a été remplacé par IIS Express (un mode utilisateur lite IIS).

Ainsi, dans de nombreux cas, quand les gens blâment cela ASP.NET est lent, ils devraient blâmer ASP.NET en fait. IIS lui-même sans ASP.NET est assez rapide et stable, tandis que ASP.NET n'a pas été développé avec suffisamment de mesures de performance à l'esprit (comme WebForms se concentre beaucoup de productivités et RAD).

Puis en novembre 2014, ASP.NET 5 (renommé plus tard en ASP.NET Core) a été annoncé et est devenu une technologie multi-plateforme. De toute évidence, Microsoft avait besoin d'un nouveau design pour prendre en charge Windows, macOS et Linux, où tous les principaux serveurs web, nginx/Apache (ou d'autres serveurs web) devraient être considérés en plus D'IIS.

Je pense que beaucoup seraient d'accord que Microsoft a beaucoup appris de NodeJS, puis a conçu et développé Kestrel (basé sur libuv initialement mais pourrait bouger à d'autres technologies bientôt). C'est un serveur web léger comme Cassini initialement, mais plus tard plus de fonctionnalités sont ajoutées (comme une autre réponse commentée, beaucoup plus de fonctionnalités peuvent donc être traitées comme un serveur web complet). Bien que entièrement géré (certaines dépendances natives existent), ce n'est plus un serveur web jouet comme Cassini.

Alors pourquoi ne pas simplement utiliser crécerelle? Pourquoi IIS Express et potentiellement IIS, nginx ou Apache sont encore nécessaires? Cela est principalement le résultat de la pratique d'internet d'aujourd'hui. La plupart des sites Web utilisent des proxys inverses pour prendre les demandes de vos navigateurs web, puis les transmettre aux serveurs d'applications en arrière-plan.

  • IIS Express/IIS/Nginx / Apache sont les serveurs proxy inversés
  • Kestrel / NodeJS / Tomcat et ainsi de suite sont les serveurs d'applications

Une autre réponse a déjà montré un lien vers la documentation Microsoft, de sorte que vous pouvez jeter un oeil.

Microsoft a développé HttpPlatformHandler initialement pour faire D'IIS un proxy inverse assez bon pour Java / Python et ainsi de suite, donc prévu de l'utiliser pour ASP.NET noyau. Les problèmes ont commencé à apparaître pendant le développement, donc plus tard Microsoft a fait ASP.NET module de base spécifiquement pour ASP.NET noyau. C'est ASP.NET prise en charge de la révision IIS 4.

Eh bien, assez long, mais j'espère que je mets toutes les pièces nécessaires ensemble et vous aimez le lire.

Notez que Microsoft planifie (probablement dans ASP.NET noyau 2.2) quelques changements énormes pour ASP.NET module de noyau, afin d'améliorer la représentation. Cette réponse pourrait être mis à jour à nouveau lorsque cela est publié.

41
répondu Lex Li 2018-07-26 20:02:43

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

Kestrel est un serveur web multi-plateforme pour ASP.NET noyau basé sur libuv, une bibliothèque d'E/S asynchrones multiplateformes. Crécerelle est le web serveur inclus par défaut dans ASP.NET modèles de projet de base.

Vous pouvez utiliser Kestrel seul ou avec un serveur proxy inverse, tel que IIS, Nginx ou Apache. Un serveur proxy inverse reçoit Les requêtes HTTP de L'Internet et les transmet à crécerelle après quelques préliminaires manutention.

3
répondu Max Wikström 2017-09-13 09:52:53