首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是Kestrel (vs IIS / Express)

什么是Kestrel (vs IIS / Express)
EN

Stack Overflow用户
提问于 2016-02-26 05:58:03
回答 4查看 50.9K关注 0票数 200

什么是kestrel web服务器?它与IIS / IIS Express有什么关系?

我来自于在IIS Express上开发应用程序,并将它们托管在IIS web服务器上。有了ASP.NET核心,我就依赖于Microsoft.AspNetCore.Server.Kestrel,我的初创公司就有了.UseServer("Microsoft.AspNetCore.Server.Kestrel")。但是当我运行我的网站时,我仍然在系统托盘中看到IIS Express图标。有人问我是在使用IIS Express还是Kestrel,我不知道该怎么说!

我没有任何跨平台的需求,因为我在PC和主机上开发Azure,所以我很困惑,如果我甚至need Kestrel,但它似乎没有其他选择-即使是最简单的示例使用Kestrel。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-26 06:07:18

什么是Kestrel

这是一个完全成熟的网络服务器。您可以只使用ASP.NET来运行Kestrel核心应用程序。

但是当我运行我的网站时,我仍然在系统托盘中看到IIS Express图标

在您的ASP.NET应用程序中,可能在wwwroot目录中,您将看到一个包含以下内容的web.config:

代码语言:javascript
复制
<?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仍然有一些优势,特别是它为您提供了安全配置、内核级缓存等。

票数 144
EN

Stack Overflow用户

发布于 2017-10-23 04:08:33

我想提供一个替代的答案,有一些历史,这样你就可以理解为什么Kestrel来了,即使你只使用Windows和IIS。

在2000年之前的ASP.NET开发之初,微软显然创建了两个组件来托管ASP.NET WebForms应用程序,

  • Cassini后来成为Visual Studio中的ASP.NET开发服务器。它是基于HttpListener用C#编写的完全托管的web服务器。当然,由于它只用于开发,因此许多功能从未实现过。随着微软向公众提供卡西尼号的源代码,有第三方派生了代码库并添加了更多功能,从而启动了对卡西尼号family.
  • ASP.NET的支持(修订版1)。由于当时的IIS4.0和5.0/5.1版本与应用程序池完全不同,因此ASP.NET甚至有自己的工作进程(aspnet_wp.exe).

因此,要开发web应用程序,请使用Cassini,而要部署web应用程序,请使用IIS。

  • 在IIS6中引入的应用程序池需要在ASP.NET端进行一些更改,因此aspnet_wp.exe变得过时,并被aspnet_isapi.dll取代。因此,ASP.NET应用程序被托管在IIS工作进程中,而在IIS7和更高版本中引入集成管道需要进一步的更改,用webengine4.dll取代了aspnet_isapi.dll。这可以看作是IIS3版对ASP.NET的支持。ASP.NET和IIS管道是统一的。

您可以看到,ASP.NET已经变得更加复杂,并且与IIS紧密集成,因此Cassini开始显露出它的年龄,并逐渐被IIS Express (一种用户模式lite IIS)所取代。

因此,在许多情况下,当人们责怪IIS速度慢时,他们实际上应该责怪ASP.NET。没有ASP.NET的IIS本身非常快速和稳定,而ASP.NET在开发时并没有考虑到足够的性能指标(因为WebForms专注于相当多的生产力和RAD)。

然后在2014年11月,核心5(后来更名为ASP.NET ASP.NET )宣布,并成为一项跨平台技术。显然,微软需要一种新的设计来支持Windows、macOS和Linux,所有主要的web服务器,nginx/Apache (或其他web服务器)都应该被考虑在内。

我想许多人会同意微软从NodeJS学到了很多,然后设计和开发了NodeJS(最初是基于libuv的,但可能很快就会转移到其他技术)。它最初是一个像Cassini一样的轻量级web服务器,但后来添加了更多的功能(就像另一个答案所评论的那样,更多的功能可以被视为一个完整的web服务器)。虽然完全托管(存在一些本地依赖项),但它不再像Cassini那样是一个玩具web服务器。

那么为什么你不能直接使用Kestrel呢?为什么仍然需要IIS Express和潜在的IIS、nginx或Apache?这主要是当今互联网实践的结果。大多数网站使用反向代理从web浏览器获取请求,然后转发到后台的应用程序服务器。

  • IIS Express/IIS/nginx/Apache是反向代理服务器
  • Kestrel/NodeJS/Tomcat,以此类推是应用服务器

另一个答案已经显示了指向Microsoft文档的链接,因此您可以查看一下。

微软最初开发HttpPlatformHandler的初衷是让IIS成为Java/Python等的反向代理,因此计划将其用于ASP.NET核心。在开发过程中开始出现问题,所以后来微软专门为ASP.NET核心开发了ASP.NET核心模块。这就是IIS第4版对ASP.NET的支持。

从IISCore2.2开始,ASP.NET核心模块(版本2)可以在ASP.NET工作进程(w3wp.exe)中托管.NET核心环境,这与ASP.NET 2.x/4.x非常相似。这种模式称为"IIS in-process hosting"。可以将其视为IIS5版上的ASP.NET支持。

嗯,相当长,但我希望我把所有必要的片段放在一起,你喜欢读它。

票数 244
EN

Stack Overflow用户

发布于 2017-09-13 17:52:53

来自ms文档,网址为:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

libuv是基于跨平台异步I/O库libuv的ASP.NET核心的跨平台web服务器。ASP.NET是默认包含在Kestrel核心项目模板中的web服务器。

您可以单独使用Kestrel,也可以将其与IIS、Nginx或Apache等反向代理服务器配合使用。反向代理服务器从Internet接收HTTP请求,并在经过一些初步处理后将其转发给Kestrel。

更新:.net核心2.1,使用托管套接字而不是libuv

来自https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration上的asp.net核心2.1文档

随着ASP.NET Core2.1的发布,

的默认传输不再基于Libuv,而是基于托管套接字。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35639205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档