什么是Kestrel(vs IIS / Express)
什么是红隼web服务器,它与IIS / IIS Express有什么关系?
我来自在IIS Express上开发应用程序并将其托pipe在IIS Web服务器上。 与ASP.NET核心我有一个依赖于Microsoft.AspNetCore.Server.Kestrel
和我的启动.UseServer("Microsoft.AspNetCore.Server.Kestrel")
。 但是当我运行我的网站,我仍然得到系统托盘中的IIS Express图标。 有人问我是否使用IIS Express或Kestrel,我不知道该说些什么!
我没有任何跨平台的需求,因为我在Azure的个人电脑和主机上开发,所以如果我甚至need
Kestrel,我感到困惑,但似乎没有其他select – 即使是最简单的样本使用Kestrel。
什么是红隼
这是一个完整的Web服务器。 您可以使用Kestrel运行您的ASP.NET Core应用程序。
但是当我运行我的网站,我仍然得到系统托盘中的IIS Express图标
在您的ASP.NET应用程序中,可能在wwwroot
目录中,您将看到包含以下内容的web.config:
<?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>
这是HttpPlatformHandler。 本质上,这是把所有的请求转发给Kestrel。 IIS Express(和IIS)就不会再运行ASP.NET了。 相反,他们将充当代理人,只是简单地传递来自Kestrel的请求和响应。 使用IIS还有一些优点,特别是它提供了安全configuration,内核级caching等。
我想提供一个替代的答案,有一些历史,所以你可以理解为什么红隼来。
在2000年之前的ASP.NET开发之初,显然微软创build了两个部分来承载ASP.NET WebForms应用程序,
- Cassini后来成为Visual Studio中的ASP.NET Development Server。 它是一个基于
HttpListener
C#编写的完全托pipe的Web服务器。 当然,由于只是为了开发,许多function从来没有实现过。 当微软公开提供卡西尼的源代码时,有第三方派生代码库,并增加了更多的function,启动了卡西尼家族。 - IIS上的ASP.NET支持(修订版本1)。 因为那个时候IIS是4.0和5.0 / 5.1,它没有什么像应用程序池,ASP.NET甚至有它自己的工作进程(
aspnet_wp.exe
)。
因此,要开发一个Web应用程序,您使用Cassini,并部署您使用IIS。
-
在IIS 6中引入应用程序池需要在ASP.NET一侧进行一些更改,所以
aspnet_wp.exe
变得过时并被aspnet_isapi.dll
取代。 这可以被看作是IIS版本2上的ASP.NET支持。所以ASP.NET应用程序被托pipe在IIS工作进程w3wp.exe
。 -
在IIS 7及以上版本中引入集成pipe道需要进一步的修改,用
webengine4.dll
代替aspnet_isapi.dll
。 这可以被看作IIS修订版本3上的ASP.NET支持。ASP.NET和IISpipe道是统一的。
你可以看到ASP.NET已经变得更加复杂,并与IIS紧密集成,所以Cassini开始展现它的年代,并逐渐被IIS Express(一个用户模式lite IIS)所取代。
因此,在许多情况下,当人们指责ASP.NET很慢的时候,实际上他们应该责怪ASP.NET。 没有ASP.NET的IIS本身是非常快速和稳定的,而ASP.NET并没有考虑到足够的性能指标(因为WebForms关注了很多生产力和RAD)。
然后在2014年11月,ASP.NET 5(后来更名为ASP.NET Core)宣布成为一个跨平台技术。 微软显然无法将其绑定到IIS。 所以新的devise必须考虑使用nginx / Apache或其他Web服务器的macOS和Linux。
我想很多人会同意,微软从libuv
学到很多东西,然后devise和开发Kestrel(最初基于libuv
但可能很快会转向其他技术)。 它最初是一个轻量级的Web服务器,比如Cassini,但后来又添加了更多的function(如另一个回答评论,更多的function可以被视为一个完整的Web服务器)。 虽然完全托pipe(一些本地依赖存在),它不再像卡西尼玩具networking服务器。
那么为什么你不能使用红隼? 为什么IIS Express和潜在的IIS,nginx或Apache仍然需要? 这主要是今天的互联网实践的结果。 大多数网站使用反向代理从您的Web浏览器接收请求,然后在后台转发到应用程序服务器。
- IIS Express / IIS / nginx / Apache是反向代理服务器
- Kestrel / NodeJS / Tomcat等是应用程序服务器
另一个答案已经显示了微软文档的链接,所以你可以看看。
微软开发的HttpPlatformHandler最初是为了使IIS成为一个足够好的Java / Python反向代理等,所以计划将它用于ASP.NET Core。 问题在开发过程中开始出现,所以后来微软专门为ASP.NET Core制作了ASP.NET Core Module。 这是IIS版本4上的ASP.NET支持。
那么很长,但我希望我把所有必要的作品放在一起,你喜欢阅读。
从ms文档: https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel? tabs =aspnetcore2x
Kestrel是基于libuv(跨平台asynchronousI / O库)的ASP.NET Core跨平台Web服务器。 Kestrel是ASP.NET Core项目模板中默认包含的Web服务器。
您可以单独使用Kestrel,也可以使用反向代理服务器,例如IIS,Nginx或Apache。 反向代理服务器接收到来自Internet的HTTP请求,并在经过一些初步处理后将其转发给Kestrel。
- 如何在非angularjs网站上使用量angular器?
- ASP.NET MVC 1.0 AfterBuilding视图在TFS Build上失败
- 为什么我在调用Response.Redirect()时得到“在发送HTTP头之后无法redirect”?
- IE9 JavaScript错误:SCRIPT5007:无法获取属性“ui”的值:对象为null或未定义
- replace为System.Web.HttpUtility.UrlEncode / UrlDecode ASP.NET 5
- RestSharp JSON参数发布
- 无法更新EntitySet – 因为它有一个DefiningQuery并且不存在<UpdateFunction>元素
- 如何在ASP.NET Response中传递大文件?
- 错误 – 与当前连接关联的交易已经完成,但尚未处理