【发布时间】:2020-04-08 06:53:48
【问题描述】:
我使用 .net core 3 开发了我的 Web 应用程序。我将它部署在运行 IIS 的主机上。我的应用程序中最重要的模块之一是应在所有应用程序生命周期内执行的计划任务。我面临的问题是应用程序在 1 或 2 小时不活动后停止。
我使用“进程外”方法部署应用程序。为了达到这个目标,我在Program.cs 使用此代码初始化应用程序:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseIISIntegration();
webBuilder.UseEnvironment(EnvironmentName);
webBuilder.UseStartup<Startup>();
});
另外,我把这些设置放到 .scproj
<PropertyGroup>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>
然后我检查我的标题,我可以在我的响应标题中看到这个条目:
Server: Kestrel
我的计划是在IHostedService 实现的,应该作为后台任务运行。
以上所有内容都让我认为应用程序应该不间断运行并且不应该由 IIS 处理,因为它在 Kestrel 上运行并且仅将 IIS 用作代理服务器。但实际上,情况有所不同。使用日志,我可以看到一两个小时后我的应用程序如何停止运行并且不再记录。
另外,我无权访问 IIS,因为它超出了我的权限,所以我无法更改它的设置。有人知道如何让我的应用程序不间断地运行吗?
【问题讨论】:
-
过去我确实对我的网络应用程序停止后台任务感到沮丧。您可以研究的一件事是使用Runly for your background tasks 之类的东西。它允许您在与您的 Web 应用程序相同的机器上托管您的后台作业,但它不会因 IIS 的奇思妙想而停止。全面披露:我与人共同创立了 Runly,希望它能帮助像你这样的人。
标签: c# asp.net asp.net-core iis