Qué es el cernícalo (vs IIS / Express)


¿Qué es el servidor web de kestrel y cómo se relaciona con IIS / IIS Express?

Vengo de desarrollar aplicaciones en IIS Express y alojarlas en un servidor web de IIS. Con ASP.NET Core Tengo una dependencia de Microsoft.AspNetCore.Server.Kestrel y mi startup tiene .UseServer("Microsoft.AspNetCore.Server.Kestrel"). Pero cuando corro mi sitio web, todavía tengo el icono de 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 como desarrollo en un PC y host en Azure, así que estoy confundido si incluso need Kestrel, pero no parece que haya una alternativa - incluso las muestras más simples utilizan Kestrel.

Author: vcsjones, 2016-02-26

3 answers

Qué es el cernícalo

Es un servidor web completo. Usted puede ejecutar su ASP.NET Aplicación principal usando solo Kestrel.

Pero cuando corro mi sitio web, todavía tengo el icono de IIS Express en la bandeja del sistema

En su ASP.NET aplicación, probablemente en el directorio wwwroot, verá una web.configuración que contiene esto:

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

Este es el controlador Httpplatform. Esencialmente, lo que esto hace es reenviar todas las solicitudes al Cernícalo. IIS Express (y IIS para el caso) no se ejecutará ASP.NET ellos mismos nunca más. En su lugar, actuarán como proxies que simplemente pasan solicitudes y respuestas de un lado a otro desde Kestrel. Todavía hay ventajas de usar IIS, específicamente le da configuración de seguridad, almacenamiento en caché a nivel de kernel, etc.

 71
Author: vcsjones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-25 22:07:18

Me gustaría ofrecer una respuesta alternativa, con un poco de historia, para que pueda entender por qué viene Kestrel, incluso si solo utiliza Windows e IIS.

Al principio de ASP.NET desarrollo antes del año 2000, claramente Microsoft creó dos piezas para alojar ASP.NET Aplicaciones WebForms,

  • Cassini, más tarde se convirtió en ASP.NET Servidor de desarrollo en Visual Studio. Es un servidor web completamente administrado escrito en C# basado en HttpListener. Por supuesto, ya que era solo para el desarrollo, muchos las características nunca se implementaron. Como Microsoft hizo que el código fuente de Cassini estuviera disponible para el público, hay terceros que bifurcaron la base de código y agregaron más características, lo que inició la familia Cassini.
  • ASP.NET soporte para IIS (revisión 1). Debido a que IIS era 4.0 y 5.0 / 5.1 en ese momento, que no tiene nada como los grupos de aplicaciones, ASP.NET incluso tiene su propio proceso de trabajo (aspnet_wp.exe).

Así que para desarrollar una aplicación web, se utiliza Cassini, y para implementar se utiliza IIS.

  • La introducción de grupos de aplicaciones en IIS 6 requirió algunos cambios en ASP.NET lado, por lo que aspnet_wp.exe se convirtió en obsoleto y reemplazado por aspnet_isapi.dll. Que se puede ver como ASP.NET soporte para la revisión 2 de IIS. Así que ASP.NET las aplicaciones se alojan en procesos de trabajo de IIS w3wp.exe.

  • La introducción del gasoducto integrado en IIS 7 y superiores requirió nuevos cambios, que sustituyeron aspnet_isapi.dll por webengine4.dll. Que se puede ver como ASP.NET soporte para la revisión 3 de IIS. ASP.NET e IIS las tuberías están unificadas.

Puedes ver ASP.NET se ha vuelto mucho más complejo y estrechamente integrado con IIS, por lo que Cassini comenzó a mostrar su edad, y gradualmente fue reemplazado por IIS Express (un IIS de modo de usuario lite).

Así, en muchos casos, cuando la gente culpa que ASP.NET es lento, deben culpar ASP.NET de hecho. IIS sí mismo sin ASP.NET es bastante rápido y estable, mientras ASP.NET no se desarrolló con suficientes métricas de rendimiento en mente (ya que WebForms se centra bastante en productividades y RAD).

Luego, en noviembre de 2014, ASP.NET 5 (más tarde renombrado a ASP.NET Core) se anunció y se convirtió en una tecnología multiplataforma. Obviamente, Microsoft necesitaba un nuevo diseño para soportar 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ó bastante de NodeJS, y luego diseñó y desarrolló Kestrel (basado en libuv inicialmente, pero podría moverse a otra tecnología pronto). Es un servidor web liviano como Cassini inicialmente, pero más tarde se agregan más características (como se comentó en otra respuesta, muchas más características, por lo que se pueden tratar como un servidor web completo). Aunque está completamente administrado (existen algunas dependencias nativas), ya no es un servidor web de juguete como Cassini.

Entonces, ¿por qué no puedes simplemente usar Cernícalo? ¿Por qué IIS Express y potencialmente IIS, nginx o Apache siguen siendo necesarios? Eso es principalmente el resultado de la práctica actual de Internet. La mayoría de los sitios web utilizan proxies inversos para tomar solicitudes de sus navegadores web y luego reenviar a los servidores de aplicaciones en segundo plano.

  • IIS Express/IIS / nginx / Apache son los servidores proxy inversos
  • Kestrel / NodeJS / Tomcat y así sucesivamente 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 y así sucesivamente, por lo que planeó usarlo para ASP.NET Core. Los problemas comenzaron a aparecer durante el desarrollo, por lo que más tarde Microsoft hizo ASP.NET Módulo Core específicamente para ASP.NET Core. Eso es ASP.NET apoyo a la revisión 4 de IIS.

Bueno, bastante largo, pero espero juntar todas las piezas necesarias y que disfrutes leerlo.

Tenga en cuenta que Microsoft está planeando (probablemente en ASP.NET Core 2.2) algunos grandes cambios para ASP.NET Módulo central, para mejorar el rendimiento. Esta respuesta podría ser actualizado de nuevo cuando se publique.

 41
Author: Lex Li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-26 20:02:43

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

Kestrel es un servidor web multiplataforma para ASP.NET Base basada en libuv, una biblioteca de E/S asíncrona multiplataforma. El cernícalo es la web servidor que se incluye de forma predeterminada en ASP.NET Plantillas de proyectos principales.

Puede usar Kestrel solo o con un servidor proxy inverso, como IIS, Nginx o Apache. Un servidor proxy inverso recibe Solicitudes HTTP de Internet y los reenvía al Cernícalo después de algunos preliminares manejo.

 3
Author: Max Wikström,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 09:52:53