混淆:ASP.NET Core 2不是托管代码,但ASP.Net Core Runtime是什么?

10

关于 Microsoft 文档 这里 中 IIS 中的 Apppool,我们可以为 ASP.NET Core 2 应用设置“非托管代码”,因为 ASP.NET Core 2 应用不需要 CLR:

enter image description here

这让我们感到困惑,因为有一个下载页面提供了下载.NET Core Runtime 2.0.6的链接:https://www.microsoft.com/net/download/all。当ASP.NET Core 2不是托管代码时,为什么还需要下载Runtime?
2个回答

20

在IIS上运行的Asp.net core是一个反向代理。这意味着:

  1. Asp.net core在单独的进程中运行。该进程运行单独的Web服务器(通常是Kestrel),绑定到本地回环接口上的一些动态端口,例如,它可能监听“localhost:3434”。

  2. IIS知道该过程(它侦听的端口,如何启动它),当IIS接收到请求时 - 它将该请求代理到在单独进程中运行的asp.net core本地Web服务器。

这意味着无需在IIS托管池中运行CLR,因为实际的Asp.net core并未在IIS应用程序池进程内运行。

当然,Asp.net core进程本身需要受控运行时,但它可以自己加载此运行时,无需任何来自IIS的协助。

更新:正如评论中所述,ASP.NET 2.1的下一个版本将引入asp.net core在IIS中托管的进程内模型。在这种情况下,Asp.net core代码实际上将在IIS应用程序池内运行。但即使在那种情况下,应该将应用程序池.NET CLR版本保留为“不使用托管代码”,因为asp.net core IIS模块会自行加载.NET Core CLR,无需IIS干预。


1
趣闻:从ASP.NET Core 2.1(目前处于预览状态)开始,将有可能在进程内托管ASP.NET Core >= 2.1应用程序,以提高请求吞吐量。请参阅此博客文章https://blogs.msdn.microsoft.com/webdev/2018/02/28/asp-net-core-2-1-0-preview1-improvements-to-iis-hosting/。 - Tseng
@Evk,请注意你的帖子已经过时,正在处理中的模型已经被移动并将成为 .NET Core 2.2 的一部分。 - BRAHIM Kamel

8
在您截图所在的下一行中就有这样的说明:
ASP.NET Core运行在一个单独的进程中并管理运行时。ASP.NET Core不依赖于加载桌面CLR。
(强调是我的)
因此,它需要一个运行时。该页面甚至告诉您如何在之前的步骤中安装运行时。只是IIS AppPool本身不会加载运行时,因此AppPool不需要知道运行时。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接