Windows Server 2016 IIS - 应用程序并不总是在运行,不是立即启动,而是开始两次

时间:2017-11-18 03:08:24

标签: iis asp.net-core windows-server-2016

我有一个在Windows Server 2016上通过IIS运行的Wep API .NET核心应用程序。

该应用程序所做的不仅仅是回复其API,因为它正在监视其他服务上的事件等。

我有3个问题:

  • 当我通过IIS(或发布更新时)启动/重启应用程序时,在有请求到来之前,它不会执行任何操作。然后应用程序启动。有没有办法强制应用程序立即运行?

  • 该应用程序进行了大量的后台处理,我发现有时它会停止做任何事情。它有一个定时器上的任务,无法执行,等等。如果我不断向记录器输出工作,这不会发生

  • 当应用程序启动时,它会向日志发送很多内容,在此期间,我可以看到它启动两次!它开始显示一个值为log的页面然后再次启动。但这有点奇怪:当应用程序启动时,有一个随机的可爱名称'选择这样我们可以区分实例,在原始和第二次启动期间,它是相同的名称,因此它显示它是同一个实例,但是第二次调用init。

是否有特定的关于应用程序在IIS容器中运行的方式可以解释这些行为?

在进行更多搜索之后,建议的选项是作为服务运行,但在我的情况下不可能,所以我仍然需要使用IIS作为反向代理创建.Net Core Kestrel应用程序。

尽管下面有评论,但我仍然没有找到任何好的解决方案,而不是定期ping网站以保持活着。

2 个答案:

答案 0 :(得分:1)

在应用程序池集"启动模式"到" AlwaysRunning"并在网站上,设置" Preload Enabled" to" true"。使用这两个设置,应用程序立即启动。

编辑:您必须进行"应用程序初始化"在IIS上启用模块

答案 1 :(得分:0)

您必须执行以下步骤:

  • 开启“应用程序初始化”
    • 转到“打开或关闭 Windows 功能”
    • 选择“万维网服务”>“应用程序开发功能”>“应用程序 初始化”
    • 按“确定”
  • 在 IIS 中的连接下,单击“应用程序池”
    • 右键单击创建的网站
    • 将“启动模式”更改为“始终运行”
    • 将“.NET CLR 版本”更改为“v4.0”
    • 将“空闲超时(分钟)”更改为“0”
    • 按“确定”
  • 转到 IIS 托管站点“高级设置”(单击站点时它位于右侧)
    • 将“启用预加载”更改为“真”
    • 按“确定”