ASPNetCoreModule 和 ASPNetCoreModuleV2 有什么区别?

amo*_*mol 17 asp.net-core

我想知道 ASPNetCoreModule 和 ASPNetCoreModuleV2 之间的区别,何时在哪种情况下使用它们。

Dai*_*Dai 30

  • ASPNetCoreModule(“版本 1”)是 IIS 模块,使 IIS 能够在 .NET Core 中运行时运行 ASP.NET Core 1.x 和 2.x 应用程序

  • ASPNetCoreModuleV2支持 ASP.NET Core 2.0 及更高版本(包括 ASP.NET Core 3.x、.NET 5、.NET 6 等)。它还支持比 V1 更多的功能(例如自定义离线消息)。

何时在何种场景下使用它们。

这是一个流程图:

  • 您是否希望在 IIS 中运行 ASP.NET Core 应用程序(而不是在 .NET Framework 上运行)?
    • 是的:
      • 您的目标是 ASP.NET Core 1.x 吗?
        • 是的(你这个受虐狂)
          • 使用ASPNetCoreModule(V1) 并立即更新到 ASP.NET Core 3.1 LTSB。
          • 使用ASPNetCoreModuleV2
      • 您的目标是 ASP.NET Core 2.x、ASP.NET Core 3.x、.NET 5 还是 .NET 6?
        • 是的
          • 使用ASPNetCoreModuleV2
          • 那么整个 StackOverflow 问题与你无关
      • 你不需要ASPNetCoreModule也不需要ASPNetCoreModuleV2

简而言之:今天没有理由使用ASPNetCoreModule(“V1”)。


关于V1 和 V2 之间实际差异的说明:

在从存储库中删除 V1 模块的最后一个版本之前,我快速研究了它的源代码,并将其与 V2 进行了比较......

唯一的主要区别在于,V1 只能作为简单的请求代理运行,将来自 IIS 的 HTTP 请求转发到子进程 ( YourAspNetCoreApp.exe),也就是说,它支持 ASP.NET Core 应用程序的进程外托管。而 V2 支持在进程内运行 ASP.NET Core ,具有许多优点。

使用进程外托管的负面后果意味着,使用 V1 时您不会收到RequestAborted通知,并且无法在 ASP.NET 代码中使用新的 HTTP/2 或 HTTP/3 功能。