C# .NET中的Cron作业(Quartz.NET)未每天触发

C# .NET中的Cron作业(Quartz.NET)未每天触发,c#,quartz.net,C#,Quartz.net,我已经在.NET中安排了一个cron作业,并且该作业在IIS中托管。在它触发的第一天(出于测试目的,我实际上在触发此作业时发送邮件)。但第二天它还没有(我希望这是每天递归的…每24小时一次)请找到下面的代码。[![在此处输入图像描述][1]][1] public class JobScheduler { public static void Start() { try { Logger.Error("------------

我已经在.NET中安排了一个cron作业,并且该作业在IIS中托管。在它触发的第一天(出于测试目的,我实际上在触发此作业时发送邮件)。但第二天它还没有(我希望这是每天递归的…每24小时一次)请找到下面的代码。[![在此处输入图像描述][1]][1]

public class JobScheduler
{
    public static void Start()
    {
        try
        {
            Logger.Error("-------------------------------------------Inside JobScheduler Start-------------------------------------------");

            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
            scheduler.Start();

            IJobDetail job = JobBuilder.Create<QualityGateSFDCActionJob>().Build();

            ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger3", "group1").WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 42)).ForJob(job).Build();

            scheduler.ScheduleJob(job, trigger);

            Logger.Error("-------------------------------------------Scheduler Started without Issues-------------------------------------------");
        }
        catch (Exception ex)
        {
            Logger.Error(ex.Message);
            throw ex;
        }
    }
}
我只想让这项工作每天早上11:42运行。我将非常感谢在这方面提供的任何帮助

应用程序建立在ASP.NET MVC上,托管在IIS上。我希望每天运行一个作业,这就是为什么我选择Cron作业(Windows服务在我的生产服务器中超出了上下文/范围)

IIS有一个称为“回收”的功能。这基本上是在IIS中重新加载所有内容

如果在IIS管理器中进入应用程序池的高级设置,则有一个回收间隔,默认为1740分钟(29小时)

当IIS回收时,应用程序将不会开始运行,直到有东西调用Web服务。因此,它将每29小时循环一次,因此取决于您何时启动Web服务,它将运行Cron作业一次或两次,但不会运行第三次,除非您在循环后调用Web服务重新启动它

基本上,IIS不是托管需要始终运行作业的应用程序的好地方

IIS有一个称为“回收”的功能。这基本上是在IIS中重新加载所有内容

如果在IIS管理器中进入应用程序池的高级设置,则有一个回收间隔,默认为1740分钟(29小时)

当IIS回收时,应用程序将不会开始运行,直到有东西调用Web服务。因此,它将每29小时循环一次,因此取决于您何时启动Web服务,它将运行Cron作业一次或两次,但不会运行第三次,除非您在循环后调用Web服务重新启动它


基本上,IIS不是托管需要始终运行作业的应用程序的好地方

我认为这与IIS有关,因为它将在一段时间后回收应用程序池,并且您的作业将不再触发。您是否为此使用静态类?长时间运行的任务不应在IIS中运行,而应更多地在外部服务或soI中运行。我同意Jehof的意见,这可能与IIS回收有关。什么时候调用这个Start()方法?它是否需要您手动执行某些操作,例如呼叫服务?感谢Jehof&CathalMF的快速回复。是的,我们将调用一个服务(RESTAPI)来发布数据。它应该每天都发生,我认为这与IIS有关,因为它会在一段时间后回收应用程序池,而您的作业将不再触发。您是否为此使用静态类?长时间运行的任务不应在IIS中运行,而应更多地在外部服务或soI中运行。我同意Jehof的意见,这可能与IIS回收有关。什么时候调用这个Start()方法?它是否需要您手动执行某些操作,例如呼叫服务?感谢Jehof&CathalMF的快速回复。是的,我们将调用一个服务(RESTAPI)来发布数据。它应该每天发生IIS应用程序池回收的其他原因也有,例如快速失败保护(在可配置数量的未处理异常之后)或在可配置数量的请求之后回收。。。为了让它可靠,计时器当然应该在一个专门的服务过程中托管。感谢CathalMF的回复。那么,你的意思是说在IIS上执行CRON作业不是一个好主意???我选择此选项是因为我没有执行此操作的权限(windows服务或生产服务器上的sql作业)。请问是IIS8吗?然后,通过应用程序初始化,您可能能够在回收后执行初始化代码,从而“恢复”计时器:IIS应用程序池也有其他原因需要回收,例如快速故障保护(在可配置数量的未处理异常后)或在可配置数量的请求后回收。。。为了让它可靠,计时器当然应该在一个专门的服务过程中托管。感谢CathalMF的回复。那么,你的意思是说在IIS上执行CRON作业不是一个好主意???我选择此选项是因为我没有执行此操作的权限(windows服务或生产服务器上的sql作业)。请问是IIS8吗?然后,通过应用程序初始化,您可以在循环后执行初始化代码,从而“恢复”计时器:
ITrigger trigger = TriggerBuilder.Create().WithIdentity("trigger3", "group1").WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 42)).ForJob(job).Build();