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

Qu’est-ce que le serveur Web kestrel et quel est son rapport avec 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 à Microsoft.AspNetCore.Server.Kestrel et mon démarrage a .UseServer("Microsoft.AspNetCore.Server.Kestrel") . Mais lorsque 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 Kestrel et je ne savais pas quoi dire!

Comme je développe sur un PC et un hôte dans Azure, je n’ai pas d’exigences multi-plateformes, donc je suis confus si j’ai même need Kestrel, mais il ne semble pas y avoir d’alternative – même les échantillons les plus simples utilisent Kestrel.

Qu’est-ce que Kestrel

C’est un serveur web complet. Vous pouvez exécuter votre application ASP.NET Core en utilisant uniquement Kestrel.

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 application ASP.NET, probablement dans le wwwroot , vous verrez un fichier web.config qui contient ceci:

          

C’est le HttpPlatformHandler. Essentiellement, ce que cela fait est de transmettre toutes les demandes à Kestrel. IIS Express (et IIS d’ailleurs) n’exécutera plus lui-même ASP.NET. Au lieu de cela, ils agiront comme des mandataires qui transmettent simplement les demandes et les réponses de Kestrel. Il y a toujours des avantages à utiliser IIS, en particulier cela vous donne la configuration de la sécurité, la mise en cache au niveau du kernel, etc.

Je voudrais proposer une autre réponse, avec un peu d’histoire, pour que vous compreniez pourquoi Kestrel vient, même si vous n’utilisez que Windows et IIS.

Au tout début du développement d’ASP.NET avant l’an 2000, il est clair que Microsoft a créé deux pièces pour héberger les applications ASP.NET WebForms,

  • Cassini, devenu plus tard ASP.NET Development Server dans Visual Studio. C’est un serveur Web entièrement géré écrit en C # basé sur HttpListener . Bien sûr, comme il s’agissait uniquement de développement, de nombreuses fonctionnalités n’ont jamais été implémentées. Lorsque Microsoft a mis à la disposition du public le code source de Cassini, il existe des tiers qui ont créé le code source et ajouté de nouvelles fonctionnalités, ce qui a donné naissance à la famille Cassini.
  • Prise en charge ASP.NET sur IIS (révision 1). Comme IIS était 4.0 et 5.0 / 5.1 à ce moment-là, ce qui n’a rien à voir avec les pools d’applications, ASP.NET a même 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 nécessitait certaines modifications du côté ASP.NET, si bien aspnet_wp.exe est devenu obsolète et remplacé par aspnet_isapi.dll . Cela peut être vu comme prise en charge ASP.NET sur IIS révision 2. Ainsi, les applications ASP.NET sont hébergées dans les processus de travail IIS w3wp.exe .

  • L’introduction du pipeline intégré dans IIS 7 et les webengine4.dll ultérieures nécessitait d’autres modifications, qui ont remplacé aspnet_isapi.dll par webengine4.dll . Cela peut être vu comme support ASP.NET sur IIS révision 3. Les pipelines ASP.NET et IIS sont unifiés.

Vous pouvez voir qu’ASP.NET est devenu beaucoup plus complexe et étroitement intégré à IIS, de sorte que Cassini a commencé à montrer son âge, et a été progressivement remplacé par IIS Express (un mode utilisateur IIS).

Ainsi, dans de nombreux cas, lorsque les utilisateurs reprochent à ASP.NET d’être lent, ils devraient en fait accuser ASP.NET. IIS lui-même sans ASP.NET est assez rapide et stable, alors qu’ASP.NET n’a pas été développé avec suffisamment de mesures de performances en tête (comme WebForms concentre beaucoup de productivités et de RAD).

En novembre 2014, ASP.NET 5 (renommé ASP.NET Core) a été annoncé et est devenu une technologie multi-plateforme. De toute évidence, Microsoft avait besoin d’une nouvelle conception pour prendre en charge Windows, macOS et Linux, où tous les principaux serveurs Web, nginx / Apache (ou d’autres serveurs Web), devraient être pris en compte en plus d’IIS.

Je pense que beaucoup seraient d’accord sur le fait que Microsoft a beaucoup appris de NodeJS, puis a conçu et développé Kestrel (basé sur libuv départ, mais pourrait bientôt passer à une autre technologie). C’est un serveur Web léger comme Cassini initialement, mais plus tard, d’autres 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), il ne s’agit plus d’un simple serveur Web comme Cassini.

Alors pourquoi ne pas utiliser Kestrel? Pourquoi IIS Express et potentiellement IIS, nginx ou Apache sont-ils toujours nécessaires? C’est principalement le résultat de la pratique d’Internet d’aujourd’hui. La plupart des sites Web utilisent des proxys inversés pour prendre les requêtes de vos navigateurs Web, puis les transférer aux serveurs d’applications en arrière-plan.

  • IIS Express / IIS / nginx / Apache sont les serveurs proxy inverses
  • 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, vous pouvez donc y jeter un coup d’œil.

Microsoft a initialement développé HttpPlatformHandler pour que IIS soit un proxy inversé suffisamment bon pour Java / Python et ainsi de suite, afin de l’utiliser pour ASP.NET Core. Les problèmes ont commencé à apparaître au cours du développement. Par la suite, Microsoft a créé ASP.NET Core Module spécifiquement pour ASP.NET Core. C’est le support ASP.NET sur IIS révision 4.

Eh bien, assez long, mais j’espère que je vais rassembler toutes les pièces nécessaires et que vous aimez lire.

Notez que Microsoft prévoit (probablement dans ASP.NET Core 2.2) d’importants changements pour ASP.NET Core Module, afin d’améliorer les performances. Cette réponse peut être mise à jour à nouveau lorsque cela est publié.

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

Kestrel est un serveur Web multi-plateforme pour ASP.NET Core basé sur libuv, une bibliothèque E / S asynchrone multi-plateforme. Kestrel est le serveur Web inclus par défaut dans les modèles de projet ASP.NET Core.

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 d’Internet et les transmet à Kestrel après quelques manipulations préliminaires.