我在 IIS 中托管了一个 ASP.NET Core (2.2( 应用程序。
应用正在使用具有以下设置的自定义应用池:
.NET CLR version: No Managed Code
Start Mode: Always Running
Idle Time-out (minutes): 0
我的启动代码如下所示:
WebHost.CreateDefaultBuilder(args)
.UseStartup<MyStartup>()
.Build()
.Run();
我预计该应用程序将始终运行,但是一段时间后,该应用程序在收到以下请求后停止:
[Microsoft.AspNetCore.Hosting.Internal.WebHost] 请求启动 HTTP/1.1 POST http://127.0.0.1:43745/app/iisintegration 0 [Microsoft.AspNetCore.Hosting.Internal.WebHost] 请求已完成 5.7107毫秒 202
应用是子应用。父应用正在使用不同的应用池,并且确实存在空闲超时。
我是否缺少一些设置来始终保持应用程序正常运行?
找到了一个有效的解决方案。需要使用进程内托管模型托管 ASP.NET Core 2.2 应用。可以按照以下步骤操作。
- 安装应用程序初始化模块 (IIS(
服务器管理器> 添加角色和功能> Web 服务器 (IIS(>应用程序开发>应用程序初始化>服务器角色
-
IIS>应用程序池>启动模式>始终运行
-
IIS>应用程序池>空闲超时> 0
-
IIS>你的应用>高级设置>预加载已启用> true
-
为进程内托管模型设置应用(核心模块 Asp.net web.config 更改和代码更改以设置正确的当前目录(
更多信息可以在以下位置找到:
-
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.2
-
https://github.com/aspnet/AspNetCore.Docs/issues/12232
-
https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.2
-
https://github.com/aspnet/AspNetCore/issues/6075