O que é o servidor Web Kestrel e como ele se relaciona com o IIS / IIS Express?
Venho desenvolvendo aplicativos no IIS Express e hospedando-os em um servidor Web IIS. Com o ASP.NET Core, tenho uma dependência Microsoft.AspNetCore.Server.Kestrel
e minha inicialização tem .UseServer("Microsoft.AspNetCore.Server.Kestrel")
. Mas quando executo meu site, ainda recebo o ícone do IIS Express na bandeja do sistema. Alguém me perguntou se eu estava usando o IIS Express ou o Kestrel e não sabia o que dizer!
Não tenho requisitos de plataforma cruzada conforme desenvolvo em um PC e host no Azure, por isso estou confuso se eu tiver need
Kestrel, mas não parece haver uma alternativa - mesmo os exemplos mais simples usam o Kestrel.
This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net
. OpaRespostas:
É um servidor web completo. Você pode executar seu aplicativo ASP.NET Core usando apenas o Kestrel.
No seu aplicativo ASP.NET, provavelmente no
wwwroot
diretório, você verá um web.config que contém isso:Este é o HttpPlatformHandler. Essencialmente, o que isso faz é encaminhar todas as solicitações ao Kestrel. O IIS Express (e o IIS) não executará mais o ASP.NET. Em vez disso, eles atuarão como proxies que simplesmente transmitem solicitações e respostas do Kestrel. Ainda há vantagens em usar o IIS, especificamente ele fornece configuração de segurança, armazenamento em cache no nível do kernel, etc.
fonte
Gostaria de oferecer uma resposta alternativa, com um pouco de histórico, para que você possa entender por que o Kestrel vem, mesmo que você use apenas o Windows e o IIS.
No início do desenvolvimento do ASP.NET antes do ano 2000, a Microsoft claramente criou duas peças para hospedar aplicativos ASP.NET WebForms,
HttpListener
. Obviamente, como era apenas para desenvolvimento, muitos recursos nunca foram implementados. Como a Microsoft disponibilizou o código-fonte da Cassini para o público, existem terceiros que bifurcaram a base de código e adicionaram mais recursos, que iniciaram a família Cassini.aspnet_wp.exe
).Portanto, para desenvolver um aplicativo Web, use o Cassini e, para implantar, use o IIS.
A introdução de pools de aplicativos no IIS 6 exigiu algumas alterações no lado do ASP.NET,
aspnet_wp.exe
tornando - se obsoleta e substituída poraspnet_isapi.dll
. Isso pode ser visto como suporte do ASP.NET na revisão 2. do IIS. Portanto, os aplicativos ASP.NET estão sendo hospedados nos processos de trabalho do IISw3wp.exe
.A introdução do pipeline integrado no IIS 7 e acima exigiu outras alterações, que foram substituídas
aspnet_isapi.dll
porwebengine4.dll
. Isso pode ser visto como suporte do ASP.NET na revisão do IIS 3. Os pipelines do ASP.NET e do IIS são unificados.Você pode ver que o ASP.NET se tornou muito mais complexo e totalmente integrado ao IIS, então a Cassini começou a mostrar sua idade e foi gradualmente substituída pelo IIS Express (um modo de usuário como o IIS).
Assim, em muitos casos, quando as pessoas culpam que o IIS é lento, elas devem culpar o ASP.NET de fato. O próprio IIS sem o ASP.NET é bastante rápido e estável, enquanto o ASP.NET não foi desenvolvido com métricas de desempenho suficientes em mente (já que o WebForms concentra muitas produtividades e RAD).
Em novembro de 2014, o ASP.NET 5 (mais tarde renomeado para ASP.NET Core) foi anunciado e se tornou uma tecnologia de plataforma cruzada. Obviamente, a Microsoft precisava de um novo design para oferecer suporte ao Windows, macOS e Linux, onde todos os principais servidores da web, nginx / Apache (ou outros servidores da web) deveriam ser considerados além do IIS.
Eu acho que muitos concordariam que a Microsoft aprendeu bastante com o NodeJS e depois projetou e desenvolveu o Kestrel (com base
libuv
inicialmente, mas pode mudar para outra tecnologia em breve). É um servidor da Web leve como o Cassini inicialmente, mas mais tarde, mais recursos estão sendo adicionados (como outra resposta comentada, muito mais recursos podem ser tratados como um servidor da Web completo). Embora totalmente gerenciado (existem algumas dependências nativas), ele não é mais um servidor de brinquedo como o Cassini.Então, por que você não pode simplesmente usar o Kestrel? Por que o IIS Express e potencialmente IIS, nginx ou Apache ainda são necessários? Isso é principalmente o resultado da prática atual da Internet. A maioria dos sites usa proxies reversos para receber solicitações de seus navegadores da Web e depois encaminhar para os servidores de aplicativos em segundo plano.
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 um proxy reverso bom o suficiente para Java / Python e assim por diante, então planejou usá-lo no ASP.NET Core. Os problemas começaram a aparecer durante o desenvolvimento; mais tarde, a Microsoft criou o ASP.NET Core Module especificamente para o ASP.NET Core. Esse é o suporte do ASP.NET na revisão 4 do IIS.
A partir do ASP.NET Core 2.2, o ASP.NET Core Module para IIS (versão 2) pode hospedar o ambiente .NET Core dentro do processo de trabalho do IIS (
w3wp.exe
), bastante semelhante ao ASP.NET 2.x / 4.x. Esse modo é chamado "Hospedagem em processo do IIS" . Pode ser considerado como suporte do ASP.NET na revisão 5 do IIS.Bem, bastante demorado, mas espero reunir todas as peças necessárias e que você goste de ler.
fonte
Do ms docs em: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
ATUALIZAÇÃO: .net core 2.1, o Kestrel usa soquetes gerenciados se o libuv
Dos documentos do asp.net core 2.1 em: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration
fonte