工作停止运行?

时间:2013-05-26 01:19:08

标签: iis quartz.net

我有一份工作,我想每十分钟一次。为了安排它,我使用:

public static IScheduler _scheduler { get; private set; }

...

        ISchedulerFactory schedFact = new StdSchedulerFactory();
        _scheduler = schedFact.GetScheduler();
        _scheduler.Start();

        string cron = "0 0/10 * 1/1 * ? *";

        JobKey jobkey = new JobKey("Radar", "F");
        IJobDetail job = JobBuilder.Create<RadarJob>()
                                    .WithIdentity(jobkey)
                                    .Build();

        CronScheduleBuilder csb = CronScheduleBuilder.CronSchedule(new CronExpression(cron)).InTimeZone(TimeZoneInfo.Local);
        ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                                            .WithIdentity("Radar-Trigger", "G")
                                                            .WithSchedule(csb)
                                                            .Build();
        try
        {
            DateTimeOffset ft = _scheduler.ScheduleJob(job, trigger);
            Response.Write("Job Scheduled");
        }
        catch (ObjectAlreadyExistsException)
        {
            Response.Write("Job Already Exists!");
        }

一开始似乎工作,这项工作每十分钟运行一次。但是,大约一个小时后,它就会停止运行。我记录成功和错误,我没有错误。是什么导致我的工作单独停止?

我正在运行IIS 7,.NET Framework 4.0,使用GoDaddy的共享托管计划。

2 个答案:

答案 0 :(得分:3)

您的工作正在IIS AppPool中运行。该池可能正在回收,这将终止石英任务,IIS将不会自动重启它(因为它会重新启动池回收时正在处理的Web请求)。

(我假设您在Global.asax文件中运行Application_Start()中的上述代码。)

我们遇到过这种情况并决定使用quartz作为独立服务,不受池回收的影响,但我不确定这是否适合您在共享主机方案下的选择。

您表明您在IIS 7上运行。如果实际上这是IIS 7.5,则Auto-Start application / global.asax / wcf service when IIS7 starts automatically中可能会有一个更好的解决方案,即配置应用程序池以自动重新启动。

答案 1 :(得分:1)

这回答迟到但我的应用程序中出现了这种错误。我通过IIS配置解决了这个问题,我在Scott Gu博客中找到了它:http://weblogs.asp.net/scottgu/auto-start-asp-net-applications-vs-2010-and-net-4-0-series