【问题标题】:Quartz.net Schedular working on local host but not working on shared hostingQuartz.net 调度程序在本地主机上工作,但在共享主机上不工作
【发布时间】:2015-07-18 10:04:42
【问题描述】:

我正在使用Quartz 在我的网站项目中安排任务。当我从 Visual Studio 本地运行时,这些作业正在执行,但是当我在共享主机上上传网站时,它不起作用。

谁能告诉我这背后的原因是什么?

public class JobSchedular
{
   Private Static IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
    public static void Start()
    {

        scheduler.Start();

        IJobDetail SendWeeklyMailJob = JobBuilder.Create<SendWeeklyMailJob>().Build();
        IJobDetail SendQuarterMailJob = JobBuilder.Create<SendQuarterlyMailJob>().Build();

        //ITrigger SendWeeklyMailJobTrigger = TriggerBuilder.Create()
        //    .WithIdentity("SendWeeklyMailJob", "SendWeeklyMailJobTrigger")
        //    .WithSchedule(CronScheduleBuilder
        //    .WeeklyOnDayAndHourAndMinute(DayOfWeek.Monday, 5, 15))
        //    .Build();

        ITrigger SendQuarterMailJobTrigger = TriggerBuilder.Create()
            .WithIdentity("SendQuarterMailJob", "group1")
            .StartNow()
            .WithDailyTimeIntervalSchedule(s => s.WithIntervalInHours(24))
            .Build();

        ITrigger SendWeeklyMailJobTrigger = TriggerBuilder.Create()
            .WithIdentity("SendWeeklyMailJob", "group1")
            .StartNow()
            .WithDailyTimeIntervalSchedule(s => s.WithIntervalInMinutes(1))
            .Build();

        scheduler.ScheduleJob(SendWeeklyMailJob, SendWeeklyMailJobTrigger);
        scheduler.ScheduleJob(SendQuarterMailJob, SendQuarterMailJobTrigger);

    }
}

这是我的工作课程。

这就是我在 global.asax 中开始这项工作的方式

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    JobSchedular.Start(); 
}

我能得到部署后它在服务器上不起作用的原因吗?如何让它在服务器上运行?

【问题讨论】:

  • Application_Start 仅在回收或启动后的第一个请求期间调用。
  • @Seany84 我知道。但是然后如何在 IIS 回收应用程序的共享主机上进行这项工作。如何创建一个留在内存中并完成工作的单例对象。
  • @SachinTrivedi,你能解决这个问题吗?因为我面临同样的问题
  • @JayakrishnanGounder 不,我不是。我改用了计时器类。
  • JFYI,我已经解决了,请查看stackoverflow.com/questions/43820464/…

标签: c# asp.net quartz.net


【解决方案1】:

您正在丢失对调度程序的引用。调度程序应该是您应用程序中的长期对象,单例是理想的。

但是,在应用程序中运行嵌入的 Quartz.net 存在问题,因为 IIS 会回收应用程序,因此会终止您的调度程序。

【讨论】:

  • 那是服务器问题?有什么办法可以以编程方式使我的调度程序对象保持活动状态?因为这在我的本地主机上运行良好。
  • 您的服务器的行为可能与本地运行的服务器不同。使您的调度程序引用静态,这将保持它。例如,在您发布的代码中,将调度程序的声明从 Start 方法中提取出来并使其成为私有静态变量应该可以解决问题。这不是理想的方法,但它会给你一个例子。
  • 根据您的建议查看我更新的代码。还是不行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多