我用石英调度器创建了asp.net站点。作业在后台运行,网站上没有其他活动。
石英调度器每30分钟一次。
IIS启动后,Scheduler将正确运行。
但是过了一段时间,Scheduler停止了跑步(大约1小时)。
如果在站点上有一个或多个活动作为用户登录或查看仪表板,那么Scheduler将正确运行。
但是当现场没有任何活动时,它就停止运行。
当现场没有活动的时候,如何保持我的调度器的活力?
我知道我的问题可以和其他问题重复。但我仍然问,因为我不能评论在其他问题的答案。
编辑:
Day Running at: 7/14/2016 4:00:00 AM
--
Day Running at: 7/14/2016 4:30:00 AM
--
Day Running at: 7/14/2016 5:00:00 AM
--
Stopped running
--
Day Running at: 7/14/2016 2:00:00 PM
--
Day Running at: 7/14/2016 2:30:00 PM
--
Day Running at: 7/14/2016 3:00:00 PM
--
Stopped running
--发布于 2016-07-14 09:23:51
默认情况下,如果应用程序在一段时间内没有收到请求,IIS将卸载应用程序。
您可以将IIS配置为永不卸载您的application.There,这是IIS卸载应用程序的许多原因--确保禁用所有这些应用程序。它在应用程序池设置中,最好转到“高级设置”并仔细遍历所有设置。
顺便提一句,如果您有一个后台任务,您需要可靠地按计划运行,那么除了web应用程序之外,为什么不将它部署到Windows服务中呢?Web应用程序最擅长为传入的请求提供服务,而不是运行计划作业。
更新
在应用程序池的高级设置中查看这些内容:
发布于 2016-07-14 09:33:23
通常情况下,您不应该将ASP.NET用于重复任务并不是为此而构建的,因此建议使用Windows。
但是,您可以使用WebBackgrounder。Scott似乎是背书 ;)他还演示了如何同时使用Quartz.NET。
或者,您可以启动一个线程,该线程每分钟都会从应用程序生成请求,以保持该线程的正常运行:
protected void Application_Start()
{
// ...
ThreadPool.QueueUserWorkItem(o => PingMyself());
}
private static void PingMyself()
{
var webClient = new WebClient();
while (true)
{
Thread.Sleep(TimeSpan.FromMinutes(1));
webClient.DownloadString("http://my.public.address.com");
}
}https://stackoverflow.com/questions/38370106
复制相似问题