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,
- Cassini, mais tarde, tornou-se ASP.NET Development Server no Visual Studio. É um servidor web totalmente gerenciado, escrito em C #, com base em
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.
- Suporte do ASP.NET no IIS (revisão 1). Como o IIS era 4.0 e 5.0 / 5.1 na época, que não tem nada como pools de aplicativos, o ASP.NET ainda possui seu próprio processo de trabalho (
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 por aspnet_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 IIS w3wp.exe
.
A introdução do pipeline integrado no IIS 7 e acima exigiu outras alterações, que foram substituídas aspnet_isapi.dll
por webengine4.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.
- O IIS Express / IIS / nginx / Apache são os servidores proxy reversos
- Kestrel / NodeJS / Tomcat e assim por diante são os servidores de aplicativos
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.