asp.net-core - IIS 的 AspNetCoreModule 模块实现了什么?

标签 asp.net-core iis

在 IIS 中托管 ASP.NET Core 网站时,我们需要安装 ASP.NET Core hosting bundle无论将站点编译为独立的程序集(包括框架和运行时库)。

在进程外运行时(IIS 将所有请求转发到 Kestrel),此要求不会改变。

AspNetCoreModuleV2 模块实现了什么? 有没有其他选择(除了不在 IIS 内运行)?

最佳答案

正如 the documentation 所解释的:

The ASP.NET Core Module is a native IIS module that plugs into the IIS pipeline, allowing ASP.NET Core applications to work with IIS. Run ASP.NET Core apps with IIS by either:

因此,根据您的托管模型,该模块的运行方式会略有不同,但最终仍然会执行相同的操作:它将允许 IIS 直接托管您的 ASP.NET Core 应用程序。之所以需要这样做是因为IIS本身有a peculiar way of hosting websites and processing requests这与经典 ASP.NET 的工作原理非常具体。

但是由于 ASP.NET Core 既不使用 .NET Framework 运行时,也不利用经典的 ASP.NET 应用程序模型,因此需要有“某种东西”来阻止 IIS 将默认的 ASP.NET 管道应用到 ASP.NET Core应用程序。这就是 ASP.NET Core IIS 模块的工作。

安装该模块基本上会将两种托管模型的功能添加到 IIS,然后可以通过 ASP.NET Core 将为您生成的 web.config 激活该功能。

如果您想通过 IIS 托管 ASP.NET Core 应用程序,那么实际上没有办法安装某些模块。 ASP.NET Core 模块是将应用程序正确集成到 IIS 的最佳方式。如果您不想使用 ASP.NET Core 模块,那么您也可以直接在 Kestrel 上托管应用程序,例如作为 Windows 服务,然后将 IIS 配置为 ASP.NET Core 应用程序的完整反向代理。但是,为了做到这一点,您将需要使用 Application Request Routing module (及其依赖项 URL Rewrite )因为 IIS 不具备开箱即用的反向代理功能。

关于 ASP.NET Core 模块的最后一点:该模块实际上只包含 IIS 托管应用程序所需的位。它对应用程序代码没有影响,您仍然需要单独安装 .NET Core 运行时,或者将您的应用程序部署为独立应用程序。然而,您不需要定期更新托管模块,因为变化很少。因此,通常情况下,您安装一次后就不再考虑它。


‡ 默认情况下,.NET Core 运行时包含在托管模块中,但您也可以单独安装托管模块,该模块大小略低于 2 MiB。

关于asp.net-core - IIS 的 AspNetCoreModule 模块实现了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66138559/

相关文章:

iis - 使用 powershell 在 IIS 中创建站点

performance - 如何通过 IIS 日志查找服务器处理时间?

c# - 使用 BindAttribute 的 Prefix 属性绑定(bind)到单个参数

c# - 在 asp.net core 3.1 中使用最新的 GraphQL 库时,无法解析 IDependencyResolver 和 ResolveFieldContext

node.js - 使用 NodeJS 通过 Active Directory 进行身份验证

asp.net - .NET 中的堆栈溢出将 IIS 发送到 100% CPU 使用率 - 为什么没有 StackOverflowException?

asp.net-core - asp-append-version ="true"未将版本附加到 javascript 文件

asp.net-core - vNext 与 ASP.NET 5

docker - 为什么我们在Asp.net core的DockerFile中需要多个复制指令

asp.net-mvc - 减少对缓存资源的 HTTP 请求数