我用石英调度程序创建了asp.net站点。作业在后台运行,网站上没有其他活动。
Quartz调度程序每30分钟安排一次。
IIS启动后,Scheduler正常运行。
但过了一段时间,Scheduler停止了运行(大约1小时)。
如果在站点上有一个或多个活动作为用户登录或查看仪表板,则Scheduler会正确运行。
但是当网站上没有任何活动时它会停止运行。
如果现场没有活动,如何让我的计划程序保持活跃状态?
P / s:我知道我的问题可能与其他问题重复。但我仍然会问,因为我无法评论其他问题的答案。
编辑:
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
--
答案 0 :(得分:5)
默认情况下,如果应用程序在一段时间内未收到任何请求,IIS将卸载您的应用程序。
您可以将IIS配置为永不卸载您的应用程序。有很多原因IIS将卸载您的应用程序 - 请确保您禁用所有这些。它位于应用程序池设置中,最好转到高级设置并仔细通过所有这些设置。
另外,如果您有后台作业,您需要按计划可靠地运行,除了Web应用程序之外,为什么不将它部署在Windows服务中呢? Web应用程序最擅长提供传入请求,而不是运行预定作业。
<强>更新强>
在应用程序池的高级设置中查看这些内容:
答案 1 :(得分:3)
通常you shouldn't use ASP.NET for recurring tasks因为它不是为此而构建的,所以建议使用Windows服务。
但是,您可以使用WebBackgrounder
。 Scott Hanselman似乎endorse it;)他还演示了如何使用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");
}
}