我不使用Kestrel作为网络服务器,也不在代码中启用IIS集成,但是显示服务器的响应标题是Kestrel

问题描述

我使用.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字,但是在响应标头中却显示“服务器是红K”。

kestrel

在项目文件中也没有<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>。而且我没有UseIISIntegration这样的代码

我的问题摘要

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

解决方法

如果您比较文档:

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中由Windows进程激活服务(WAS)管理的IIS中在进程内运行的ASP.NET 4.x应用程序具有相同的行为。

在2.2版中:

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

2.2版默认为Incesscess。

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

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

,

您的问题:

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

答案:

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

enter image description here

  • 您的托管模式不是:

enter image description here

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