我在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
该应用程序是子应用程序。父应用程序使用不同的应用程序池,并且确实有空闲超时。
是否有一些设置我错过了保持应用程序的所有时间?
2条答案
按热度按时间llycmphe1#
找到了一个有效的解决方案。您需要使用进程内托管模型托管您的ASP.NET Core 2.2应用程序。可以按照以下步骤进行操作。
1.安装应用程序调试模块(IIS)
服务器管理器>添加角色和功能>服务器角色> Web服务器(IIS)>应用程序开发>应用程序配置
1.为进程内托管模式设置您的应用程序(更改Asp.net核心模块的web.config和代码以设置正确的当前目录)
更多信息请访问:
4xrmg8kj2#
只是为了补充上面的答案-它在大多数情况下都能工作,但对我来说不起作用,原因是我使用的是windows身份验证,并且对应用程序的每个部分都有授权要求,包括根。
当您设置了启用预加载时,IIS将在回收应用程序池(通常在空闲1740分钟后)后尝试唤醒您的应用程序,但它将获得401,并且如果请求无法授权,则无法唤醒您的应用程序。
这意味着如果你使用Windows身份验证,你需要做两件事:
1.在IIS中允许匿名身份验证沿着Windows身份验证
1.在Program.cs中,请确保您没有强制将每个请求都授权为回退策略。如果您有以下代码,请禁用回退策略(或者更好的是添加一个仅应用于您的控制器的自定义策略:
字符串
以下是仅应用于控制器的自定义授权策略的示例:
型