¿Qué es el servidor web kestrel y cómo se relaciona con IIS / IIS Express?
Vengo de desarrollar aplicaciones en IIS Express y alojarlas en un servidor web IIS. Con ASP.NET Core tengo una dependencia Microsoft.AspNetCore.Server.Kestrel
y mi inicio tiene .UseServer("Microsoft.AspNetCore.Server.Kestrel")
. Pero cuando ejecuto mi sitio web, sigo recibiendo el ícono IIS Express en la bandeja del sistema. ¡Alguien me preguntó si estaba usando IIS Express o Kestrel y no sabía qué decir!
No tengo ningún requisito multiplataforma a medida que desarrollo en una PC y host en Azure, por lo que estoy confundido si incluso need
Kestrel, pero no parece que haya una alternativa, incluso las muestras más simples usan Kestrel.
This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net
. UpsRespuestas:
Es un servidor web completo. Puede ejecutar su aplicación ASP.NET Core usando solo Kestrel.
En su aplicación ASP.NET, probablemente en el
wwwroot
directorio, verá un web.config que contiene esto:Este es el HttpPlatformHandler. Esencialmente, lo que esto hace es reenviar todas las solicitudes a Kestrel. IIS Express (e IIS para el caso) ya no ejecutarán ASP.NET. En cambio, actuarán como representantes que simplemente pasan solicitudes y respuestas de Kestrel de un lado a otro. Todavía hay ventajas de usar IIS, específicamente le brinda configuración de seguridad, almacenamiento en caché a nivel de kernel, etc.
fuente
Me gustaría ofrecer una respuesta alternativa, con algo de historia, para que pueda entender por qué viene Kestrel, incluso si solo usa Windows e IIS.
Al comienzo del desarrollo de ASP.NET antes del año 2000, claramente Microsoft creó dos piezas para alojar aplicaciones ASP.NET WebForms,
HttpListener
. Por supuesto, dado que era solo para desarrollo, muchas características nunca se implementaron. A medida que Microsoft puso a disposición del público el código fuente de Cassini, hay terceros que bifurcaron la base del código y agregaron más funciones, lo que inició la familia Cassini.aspnet_wp.exe
).Entonces, para desarrollar una aplicación web, usa Cassini y para implementar usa IIS.
La introducción de grupos de aplicaciones en IIS 6 requirió algunos cambios en el lado de ASP.NET, por lo que se
aspnet_wp.exe
volvió obsoleto y reemplazado poraspnet_isapi.dll
. Eso puede verse como soporte de ASP.NET en la revisión 2 de IIS. Por lo tanto, las aplicaciones ASP.NET se alojan en procesos de trabajo de IISw3wp.exe
.La introducción de la tubería integrada en IIS 7 y superior requirió más cambios, que se reemplazaron
aspnet_isapi.dll
porwebengine4.dll
. Eso puede verse como soporte de ASP.NET en la revisión IIS 3. Las tuberías de ASP.NET e IIS están unificadas.Puede ver que ASP.NET se ha vuelto mucho más complejo y está estrechamente integrado con IIS, por lo que Cassini comenzó a mostrar su edad y gradualmente fue reemplazado por IIS Express (un modo de usuario lite IIS).
Por lo tanto, en muchos casos, cuando las personas culpan que IIS es lento, deberían culpar a ASP.NET de hecho. IIS en sí sin ASP.NET es bastante rápido y estable, mientras que ASP.NET no se desarrolló con suficientes métricas de rendimiento en mente (ya que WebForms enfoca muchas productividades y RAD).
Luego, en noviembre de 2014, se anunció ASP.NET 5 (luego renombrado a ASP.NET Core) y se convirtió en una tecnología multiplataforma. Obviamente, Microsoft necesitaba un nuevo diseño para admitir Windows, macOS y Linux, donde todos los principales servidores web, nginx / Apache (u otros servidores web) deberían considerarse además de IIS.
Creo que muchos estarían de acuerdo en que Microsoft aprendió mucho de NodeJS, y luego diseñó y desarrolló Kestrel (basado
libuv
inicialmente, pero podría pasar a otra tecnología pronto). Es un servidor web liviano como Cassini inicialmente, pero luego se agregan más funciones (como comentó otra respuesta, muchas más funciones, por lo que se pueden tratar como un servidor web completo). Aunque completamente administrado (existen algunas dependencias nativas), ya no es un servidor web de juguete como Cassini.Entonces, ¿por qué no puedes usar Kestrel? ¿Por qué aún se necesitan IIS Express y potencialmente IIS, nginx o Apache? Eso es principalmente el resultado de la práctica actual de internet. La mayoría de los sitios web utilizan proxys inversos para recibir solicitudes de sus navegadores web y luego reenviarlos a los servidores de aplicaciones en segundo plano.
Otra respuesta ya mostró un enlace a la documentación de Microsoft, por lo que puede echar un vistazo.
Microsoft desarrolló HttpPlatformHandler inicialmente para hacer de IIS un proxy inverso lo suficientemente bueno para Java / Python, etc., así que planeó usarlo para ASP.NET Core. Los problemas comenzaron a aparecer durante el desarrollo, por lo que más tarde Microsoft creó el Módulo ASP.NET Core específicamente para ASP.NET Core. Ese es el soporte de ASP.NET en la revisión 4 de IIS.
A partir de ASP.NET Core 2.2, el Módulo ASP.NET Core para IIS (versión 2) puede alojar el entorno .NET Core dentro del proceso de trabajo de IIS (
w3wp.exe
), bastante similar a ASP.NET 2.x / 4.x. Este modo se llama "IIS en proceso de alojamiento" . Se puede considerar como soporte ASP.NET en la revisión 5 de IIS.Bueno, bastante largo, pero espero juntar todas las piezas necesarias y disfruten de leerlo.
fuente
De ms docs en: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
ACTUALIZACIÓN: .net core 2.1, Kestrel utiliza sockets administrados en su lugar si libuv
De asp.net core 2.1 docs en: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration
fuente