Sea*_*ean 134 asp.net iis kestrel-http-server asp.net-core
什么是Kestrel Web服务器以及它与IIS/IIS Express的关系?
我来自在IIS Express上开发应用程序并在IIS Web服务器上托管它们.使用ASP.NET Core我依赖于Microsoft.AspNetCore.Server.Kestrel我的启动.UseServer("Microsoft.AspNetCore.Server.Kestrel").但是当我运行我的网站时,我仍然在系统托盘中获得IIS Express图标.有人问我是否使用IIS Express或Kestrel,我不知道该说些什么!
我没有任何跨平台要求,因为我在PC上开发并在Azure中托管,所以我很困惑,如果我甚至是needKestrel,但它似乎没有替代品 - 即使最简单的样本也使用Kestrel.
Lex*_* Li 135
我想提供一个替代答案,有一些历史记录,这样你就可以理解为什么Kestrel来了,即使你只使用Windows和IIS.
在2000年之前的ASP.NET开发之初,很明显微软创建了两个部分来托管ASP.NET WebForms应用程序,
HttpListener.当然,由于它仅用于开发,因此许多功能从未实现过.由于微软为公众提供了Cassini的源代码,因此有第三方分叉代码库并增加了更多功能,从而启动了Cassini家族.aspnet_wp.exe).因此,要开发Web应用程序,您使用Cassini,并部署您使用IIS.
在IIS 6中引入应用程序池需要在ASP.NET方面进行一些更改,因此aspnet_wp.exe变得过时并被替换为aspnet_isapi.dll.这可以看作是IIS修订版2上的ASP.NET支持.因此,ASP.NET应用程序正在IIS工作进程中托管w3wp.exe.
在IIS 7及更高版本中引入集成管道需要进一步改变,取而代之的aspnet_isapi.dll是webengine4.dll.这可以看作是IIS修订版3上的ASP.NET支持.ASP.NET和IIS管道是统一的.
您可以看到ASP.NET变得更加复杂并且与IIS紧密集成,因此Cassini开始显示其年龄,并逐渐被IIS Express(用户模式精简版IIS)取代.
因此,在许多情况下,当人们指责IIS很慢时,他们应该责怪ASP.NET.没有ASP.NET的IIS本身非常快速和稳定,而ASP.NET的开发时没有考虑到足够的性能指标(因为WebForms集中了很多生产力和RAD).
然后在2014年11月,ASP.NET 5(后来改名为ASP.NET Core)宣布成为跨平台技术.显然,微软需要一种新的设计来支持Windows,macOS和Linux,除了IIS之外,还应考虑所有主要的Web服务器,nginx/Apache(或其他Web服务器).
我想很多人会同意微软从NodeJS那里学到很多东西,然后设计和开发了Kestrel(libuv最初的基础,但很快就会转向其他技术).它最初是像Cassini这样的轻量级Web服务器,但后来添加了更多功能(如另一个答案评论,更多功能可以被视为完整的Web服务器).虽然完全托管(存在一些本机依赖项),但它不再是像Cassini那样的玩具网络服务器.
那为什么你不能只使用红隼呢?为什么仍然需要IIS Express以及可能的IIS,nginx或Apache?这主要是今天的互联网实践的结果.大多数网站使用反向代理从您的Web浏览器接收请求,然后在后台转发到应用程序服务器.
另一个答案已经显示了Microsoft文档的链接,因此您可以查看一下.
Microsoft最初开发了HttpPlatformHandler,使IIS成为Java/Python等的反向代理,因此计划将其用于ASP.NET Core.问题在开发过程中开始出现,因此后来Microsoft专门为ASP.NET Core制作了ASP.NET核心模块.这是IIS版本4上的ASP.NET支持.
从ASP.NET Core 2.2开始,用于IIS的ASP.NET核心模块(版本2)可以在IIS工作进程(w3wp.exe)内部托管.NET Core环境,非常类似于ASP.NET 2.x/4.x. 此模式称为"IIS进程内托管".它可以被视为IIS修订版5上的ASP.NET支持.
嗯,相当冗长,但我希望我把所有必要的部分放在一起,你喜欢阅读它.
vcs*_*nes 102
什么是红隼
这是一个完整的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>
Run Code Online (Sandbox Code Playgroud)
这是HttpPlatformHandler.从本质上讲,这样做是将所有请求转发给Kestrel.IIS Express(以及IIS)将不再自行运行ASP.NET.相反,它们将充当代理,只是简单地从Kestrel传递请求和响应.使用IIS仍然有优势,特别是它为您提供安全配置,内核级缓存等.
Ali*_*yat 14
来自ms docs:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel? tabs =aspnetcore2x
Kestrel是基于libuv(一种跨平台异步I/O库)的ASP.NET Core的跨平台Web服务器.Kestrel是ASP.NET Core项目模板中默认包含的Web服务器.
您可以单独使用Kestrel,也可以使用反向代理服务器,例如IIS,Nginx或Apache.反向代理服务器接收来自Internet的HTTP请求,并在进行一些初步处理后将它们转发给Kestrel.
| 归档时间: |
|
| 查看次数: |
25154 次 |
| 最近记录: |