O que é o Kestrel (vs IIS / Express)

o que é o servidor web do kestrel e como se relaciona com o IIS / IIS Express?

Venho do desenvolvimento de aplicações no IIS Express e do seu alojamento num servidor web IIS. Com ASP.NET Core eu tenho uma dependência de {[[0]} e a minha startup tem .UseServer("Microsoft.AspNetCore.Server.Kestrel"). Mas quando dirijo o meu site, ainda tenho o ícone do expresso IIS na bandeja do sistema. Alguém me perguntou se eu estava a usar o IIS Express ou o Kestrel e eu não sabia o que dizer!

Não tenho quaisquer requisitos de plataforma cruzada à medida que me desenvolvo num PC e hospedeiro em Azure, então estou confuso se eu mesmo {[[2]} Kestrel, mas não parece que haja uma alternativa-mesmo as amostras mais simples usam Kestrel.

Author: vcsjones, 2016-02-26

3 answers

O Que é o Kestrel

É um servidor web completo. Você pode executar o seu ASP.NET Aplicação principal usando apenas o Kestrel.
Mas quando dirijo o meu site, ainda tenho o ícone do expresso IIS na bandeja do sistema.

No seu ASP.NET aplicação, provavelmente no diretório wwwroot, você verá uma web.configuração que contém isto:

<?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 é o Httplatformhandler. Essencialmente, o que isto faz é encaminhar todos os pedidos ao Kestrel. O O Express (e o IIS já agora) não funcionará ASP.NET já não são eles. Em vez disso, eles vão agir como proxies que simplesmente passam pedidos e respostas de volta e para a frente de Kestrel. Ainda há vantagens de usar o IIS, especificamente ele lhe dá configuração de segurança, cache de nível de kernel, etc.
 71
Author: vcsjones, 2016-02-25 22:07:18
Eu gostaria de oferecer uma resposta alternativa, com alguma história, para que você possa entender por que Kestrel vem, mesmo que você só use Windows e IIS.

No início da ASP.NET desenvolvimento antes do ano 2000, claramente a Microsoft criou duas peças para hospedar ASP.NET aplicações WebForms,

    Cassini, mais tarde tornou-se ASP.NET servidor de desenvolvimento em Visual Studio. É um servidor web totalmente gerenciado escrito em C# baseado em HttpListener. É claro, uma vez que era apenas para o desenvolvimento, muitas características nunca foram implementadas. Como a Microsoft tornou o código fonte da Cassini disponível para o público, há terceiros que bifurcaram a base de código e adicionaram mais recursos, o que iniciou a família Cassini.
  • ASP.NET apoio ao IIS (Revisão 1). Porque o IIS era de 4.0 e 5.0 / 5.1 naquela época, que não tinha nada como piscinas de aplicação, ASP.NET até tem o seu próprio processo de trabalho ([1]).
Então, para desenvolver um aplicativo web, você usa Cassini, e para implantar você usa O.
  • A introdução de agrupamentos de aplicações na IIS 6 exigiu algumas alterações em ASP.NET lado, então {[1] } tornou-se obsoleto e substituído por aspnet_isapi.dll. Isso pode ser visto como ASP.NET apoio à revisão 2 do IIS. Então ... ASP.NET os aplicativos estão sendo hospedados em processos de trabalhadores do IIS w3wp.exe.

  • A introdução de um gasoduto integrado nas zonas IIS 7 e acima requer novas alterações, que substituíram aspnet_isapi.dll por webengine4.dll. Isso pode ser visto como ASP.NET apoio à revisão 3 da IIS. ASP.NET e IIS os oleodutos estão unificados.

Podes ver ASP.NET tornou-se muito mais complexo e fortemente integrado com o IIS, então Cassini começou a mostrar sua idade, e gradualmente foi substituído pelo IIS Express (um modo de usuário lite IIS).

Assim, em muitos casos, quando as pessoas culpam ASP.NET é lento, eles devem culpar ASP.NET na verdade. Sem ASP.NET é bastante rápido e estável, enquanto ASP.NET não foi desenvolvido com métricas de desempenho suficientes em mente (como WebForms foca bastante de produtividade e RAD). Então, em novembro de 2014, ASP.NET 5 (mais tarde renomeado para ASP.NET Core) foi anunciado e se tornou uma tecnologia de plataforma cross. Obviamente a Microsoft precisava de um novo projeto para suportar Windows, macOS e Linux, onde todos os principais servidores web, nginx/Apache (ou outros servidores web) devem ser considerados além do IIS.

Eu acho que muitos concordariam que a Microsoft aprendeu bastante com o NodeJS, e então projetou e desenvolveu o Kestrel (baseado em libuv inicialmente, mas pode mover-se para outra tecnologia em breve). É um servidor web light-weight como Cassini inicialmente, mas mais tarde mais recursos estão sendo adicionados (como outra resposta comentada, muito mais recursos assim podem ser tratados como um servidor web completo). Embora totalmente gerenciado (algumas dependências nativas existem), ele não é mais um servidor toy web como Cassini.

Então porque não podes usar o Kestrel? Porque é que o IIS Express e potencialmente o IIS, o nginx ou o Apache ainda são necessários? Isso é principalmente resultado da internet de hoje pratica. A maioria dos sites usam proxies invertidos para atender pedidos de seus navegadores web e, em seguida, encaminhar para os servidores de aplicação em segundo plano.
  • IIS Express/IIS/nginx / Apache são os servidores proxy inversos
  • o Kestrel/NodeJS / Tomcat e assim por diante são os servidores de Aplicação

Outra resposta já mostrou um link para a documentação da Microsoft, para que você possa dar uma olhada.

A Microsoft desenvolveu o HttpPlatformHandler inicialmente para tornar o IIS suficientemente bom proxy inverso para Java / Python e assim por diante, então planejada para usá-lo para ASP.NET núcleo. Problemas começaram a aparecer durante o desenvolvimento, então mais tarde a Microsoft fez ASP.NET módulo principal especificamente para ASP.NET núcleo. Isso é ... ASP.NET apoio à revisão 4 da IIS.

Bem, bastante demorado, mas espero juntar todas as peças necessárias e gostares de a ler.

Note que a Microsoft está a planear (provavelmente em ASP.NET núcleo 2.2) algumas grandes mudanças para ASP.NET módulo principal, de modo a melhorar o desempenho. Presente

 41
Author: Lex Li, 2018-07-26 20:02:43

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

O Kestrel é um servidor web multi-plataforma para ASP.NET principal com base em libuv, uma biblioteca assíncrona de plataforma cruzada. O Kestrel é a web servidor que está incluído por omissão em ASP.NET modelos do projecto principal.

Pode usar o Kestrel por si só ou com um servidor 'proxy' reverso, como por exemplo IIS, Nginx, ou Apache. Um servidor 'proxy' inverso recebe pedidos HTTP a partir da Internet e encaminhá-los para Kestrel após alguns preliminares tratamento.

 3
Author: Max Wikström, 2017-09-13 09:52:53