3

我在我的 ASP.NET Web 应用程序中使用 Quartz.NET。我将以下代码放在按钮单击处理程序中以确保它执行(用于测试目的):

Quartz.ISchedulerFactory factory = new Quartz.Impl.StdSchedulerFactory();
Quartz.IScheduler scheduler = factory.GetScheduler();
Quartz.JobDetail job = new Quartz.JobDetail("job", null, typeof(BackupJob));
Quartz.Trigger trigger = Quartz.TriggerUtils.MakeDailyTrigger(8, 30); // i edit this each time before compilation (for testing purposes)
trigger.StartTimeUtc = Quartz.TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
trigger.Name = "trigger";
scheduler.ScheduleJob(job, trigger);
scheduler.Start();

这是“备份作业”:

public class BackupJob : IJob
{
    public BackupJob()
    {
    }

    public void Execute(JobExecutionContext context)
    {
        NSG.BackupJobStart();
    }
}

我的问题:为什么“BackupJobStart()”没有触发?我以前使用过类似的代码,它工作得很好。

编辑:@Andy White,我会在 Global.asax 的 Application_Start 中使用它。这不起作用,这就是为什么我将其移至按钮单击处理程序以缩小问题范围。

4

4 回答 4

5

你有连接 Quartz.NET 日志吗?我曾经遇到过无法执行作业的问题(我忘记了原因),但是一旦我启动了 Quartz.NET 日志记录,问题就很明显了。

值得一试(如果您还没有这样做):

更新:只需将其添加到您的 program.cs 即可启用控制台日志记录:

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info};
于 2009-03-25T06:54:52.217 回答
3

也许是时间的问题。

我和你有同样的问题,我住在一个时间是 UTC + 2 的国家。所以,当我将 StartTimeUtc 设置为触发器时,我使用了 DateTime.Now,所以触发器不必触发直到两个小时后,我认为它必须在我的代码开始的那一刻被解雇。

仔细查看触发器的执行时间及其 StartTime

于 2010-03-31T11:52:13.270 回答
1

另一种可能性是您运行调度程序的方式。我不完全确定,但您可能会在尝试在 ASP.NET 应用程序中运行调度线程时遇到问题。将 SchedulerFactory/Scheduler 对象放在按钮单击处理程序中似乎不会为您提供所需的结果。

您可能需要在更“全局”级别创建调度程序,以便它可以在应用程序的“后台”中运行。将任何计划的工作移动到单独的 Windows 服务中也可能有意义,这样您就不必在 Web 应用程序中维护计划程序。

当你过去取得成功时,你是如何调用调度程序的?

于 2009-03-25T07:01:57.817 回答
0

就我而言,IoC 存在问题——有些接口没有实现。我可以通过添加日志来查看我的问题:

Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info};

按照安迪·怀特Program.cs的建议

于 2018-09-12T10:51:40.237 回答