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,
- Cassini, más tarde se convirtió en ASP.NET Development Server en Visual Studio. Es un servidor web totalmente administrado escrito en C # basado en
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.
- Soporte de ASP.NET en IIS (revisión 1). Debido a que IIS era 4.0 y 5.0 / 5.1 en ese momento, que no tiene nada que ver con los grupos de aplicaciones, ASP.NET incluso tiene su propio proceso de trabajo (
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 por aspnet_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 IIS w3wp.exe
.
La introducción de la tubería integrada en IIS 7 y superior requirió más cambios, que se reemplazaron aspnet_isapi.dll
por webengine4.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.
- IIS Express / IIS / nginx / Apache son los servidores proxy inversos
- Kestrel / NodeJS / Tomcat y demás son los servidores de aplicaciones
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.