【问题标题】:I don't use Kestrel as the web server and enable IIS integration in the code but Response Header showing the server is Kestrel我不使用 Kestrel 作为 Web 服务器并在代码中启用 IIS 集成,但显示服务器是 Kestrel 的响应标头
【发布时间】:2021-01-03 08:20:18
【问题描述】:

我使用 .net core 2.1 并将其发布到 IIS 8.5。我很难理解 .NET 核心托管的概念。

program.cs 是

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
   }

你看到没有UseKestrel这个词,但是在响应头中,它显示Server是Kestrel。

同样在项目文件中,没有&lt;AspNetCoreHostingModel&gt;InProcess&lt;/AspNetCoreHostingModel&gt;。而且我没有UseIISIntegration之类的代码。

我的问题总结:

  1. 为什么使用Kestrel
  2. inprocess还是outofprocess
  3. 哪个文件处理这种特殊情况?我假设它是AspNetCoreModule,但是哪个文件?(w3wp?)

【问题讨论】:

    标签: asp.net-core iis .net-core kestrel-http-server


    【解决方案1】:

    你的问题:

    1. 为什么它使用 Kestrel?
    2. 是进程内还是进程外?
    3. 哪个文件处理这种特殊情况?我假设它是 AspNetCoreModule,但是哪个文件?(w3wp?)

    答案:

    1. 因为你使用dotnet run命令运行。
    2. 外进程
    3. w3wp.exedotnet.exe
    • 您的托管模式是:

    • 您的托管模式不是:

    图片来源及参考文档:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1#out-of-process-hosting-model

    【讨论】:

    • 你可以新建一个ASP.NET Core项目,进入源码目录,运行命令dotnet run,你会看到Kestrel服务器的header。
    • 我认为是,但我想要任何链接或 ILSpy 或源代码。
    【解决方案2】:

    如果您比较文档:

    v 2.1:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.1

    和 v 2.2:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2

    您可以从一开始就看到版本之间的差异。

    在 2.1 中:

    由于 ASP.NET Core 应用程序在独立于 IIS 工作进程的进程中运行,因此该模块还处理进程管理。该模块在第一个请求到达时启动 ASP.NET Core 应用程序的进程,并在应用程序崩溃时重新启动它。这与在由 Windows 进程激活服务 (WAS) 管理的 IIS 中以进程内运行的 ASP.NET 4.x 应用程序所见的行为基本相同。

    在 v 2.2 中:

    ASP.NET Core 模块是一个本机 IIS 模块,可插入 IIS 管道以执行以下任一操作: 在 IIS 工作进程 (w3wp.exe) 中托管 ASP.NET Core 应用程序,称为进程内托管模型。 将 Web 请求转发到运行 Kestrel 服务器的后端 ASP.NET Core 应用,称为进程外托管模型。

    进程内是 v 2.2 的默认设置。

    我在 v 3.1 的进程内模型上测试了我的设置,它可以按您的预期工作。在本地,它返回 kestrel,在 IIS 上,它返回 IIS 服务器。

    你所有的答案都在这两个链接下。

    【讨论】:

    • 嗨,我的本地和 IIS 在 v 2.1 中都返回 Kestrel。不确定 v 3.1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多