我们有一个托管在 IIS 8.0 上的 Intranet 应用程序。
我们有一些可用的网络方法需要在特定时间执行。
因此,我们使用了 Quartz 调度程序来调度执行 Web 方法的作业。在 global.asax 的 Application_Start 事件中,我们编写了启动调度程序的代码。
为了保持调度器启动和运行,应用程序池应该始终处于运行模式,所以我们设置了属性 startMode=“AlwaysRunning”,而且,应用程序应该启动,所以我们设置了应用程序属性 preloadEnabled=“True” .
我们每 1740 分钟(29 小时,默认时间)回收一次应用程序池。
这里的问题是:
如果我有一份安排在凌晨 3:00 的工作。我的应用程序池处于运行状态。
我在预定时间的前一天下午 6:00 浏览了该应用程序。
根据回收时间,我的应用程序池已在凌晨 2:00 被回收,直到凌晨 3:00 我的应用程序未被 ping,但我的应用程序池处于运行状态。
当应用程序池被回收时,应用程序池将再次启动(因为属性 startMode=“AlwaysRunning”),但如果该工作进程的进程 ID 将不同。
由于应用程序池的回收,quartz 没有按计划执行作业。如果我在应用程序池回收后浏览应用程序,那么 quartz 将按照计划执行作业。
谁能尽快帮我解决这个问题?
感谢期待。
最佳答案
如果您的 IIS 8.0 在 Sever 2012 操作系统上运行,您将需要打开“应用程序初始化”功能。
请访问this link了解更多信息。
只有在添加特性后,属性'preloadEnabled=“True”'才会生效。
如果您在任何其他操作系统上遇到此问题,请告诉我。
希望这会有所帮助。
关于quartz-scheduler - Quartz 调度程序在应用程序池回收后不执行作业(.Net),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31022741/