我想提供一个替代的答案,有一些历史,这样你就可以理解为什么Kestrel来了,即使你只使用Windows和IIS。
在ASP开始的时候。NET开发在2000年之前,显然微软创建了两个部分来托管ASP。NET WebForms应用程序,
Cassini, later became ASP.NET Development Server in Visual Studio. It is a fully managed web server written in C# based on HttpListener. Of course, since it was for development only, many features were never implemented. As Microsoft made the source code of Cassini available for the public, there are third parties who forked the code base and added more features, which started the Cassini family.
ASP.NET support on IIS (revision 1). Because IIS was 4.0 and 5.0/5.1 at that time, which has nothing like application pools, ASP.NET even has its own worker process (aspnet_wp.exe).
所以要开发一个web应用,你使用卡西尼,部署你使用IIS。
The introduction of application pools in IIS 6 required some changes on ASP.NET side, so aspnet_wp.exe became obsolete and replaced by aspnet_isapi.dll. That can be seen as ASP.NET support on IIS revision 2. So ASP.NET apps are being hosted in IIS worker processes w3wp.exe.
The introduction of integrated pipeline in IIS 7 and above required further changes, which replaced aspnet_isapi.dll with webengine4.dll. That can be seen as ASP.NET support on IIS revision 3. ASP.NET and IIS pipelines are unified.
你可以看到ASP。NET已经变得更加复杂,并且与IIS紧密集成,因此Cassini开始显示出它的年龄,并逐渐被IIS Express(用户模式的精简版IIS)所取代。
因此,在许多情况下,当人们指责IIS太慢时,他们应该指责ASP。NET。IIS本身没有ASP。NET非常快速和稳定,而ASP。NET在开发时没有考虑到足够的性能指标(因为WebForms非常关注生产力和快速开发)。
2014年11月,ASP。NET 5(后来更名为asp.net 5。NET Core)的发布,并成为一种跨平台技术。显然,微软需要一个新的设计来支持Windows、macOS和Linux,除了IIS之外,所有主要的web服务器、nginx/Apache(或其他web服务器)都应该考虑在内。
我想很多人会同意微软从NodeJS中学到了很多东西,然后设计和开发了Kestrel(最初基于libuv,但可能很快会转向其他技术)。它最初是一个像Cassini一样的轻量级web服务器,但后来添加了更多的功能(比如另一个回答,更多的功能,所以可以被视为一个完整的web服务器)。虽然完全托管(存在一些本地依赖),但它不再是像Cassini那样的玩具web服务器。
那你为什么不能直接用红隼?为什么仍然需要IIS Express和潜在的IIS, nginx或Apache ?这主要是当今互联网实践的结果。大多数网站使用反向代理从您的web浏览器接收请求,然后转发到后台的应用程序服务器。
IIS Express/IIS/nginx/Apache为反向代理服务器
Kestrel/NodeJS/Tomcat等是应用服务器
另一个答案已经显示了微软文档的链接,所以您可以查看一下。
微软最初开发HttpPlatformHandler是为了使IIS成为Java/Python等足够好的反向代理,所以计划将它用于ASP。净的核心。在开发过程中开始出现问题,所以后来微软开发了ASP。NET核心模块,专门为ASP。净的核心。这是ASP。在IIS修订版4上支持NET。
从ASP开始。asp.net Core 2.2;.NET Core Module for IIS (version 2)可以在IIS工作进程(w3wp.exe)中托管.NET Core环境,非常类似于ASP。NET 2. x / 4. x。这种模式称为“IIS进程内托管”。它可以被认为是ASP。在IIS版本5上支持NET。
好吧,很长,但我希望我把所有必要的东西放在一起,你会喜欢读它。
最近的一次更新(2023年1月)是ASP。NET Core/Kestrel可以用来承载反向代理功能本身,正如开源YARP项目所揭示的那样。
Kestrel/YARP现在在微软Azure中广泛使用,在许多场景中取代IIS ARR,所以现在你可以使用Kestrel/YARP托管自己的生产web应用程序,而不需要任何其他web服务器(IIS/nginx/Apache)。