2015-07-18 3 views
1

Я использую Quartz для планирования задач в своем проекте веб-сайта. Работы выполняются, когда я запускаю их локально из visual studio, но когда я загружаю сайт на общий хостинг, он не работает.Quartz.net Schedular работает на локальном хосте, но не работает на общем хостинге

Может ли кто-нибудь сказать мне, что может быть причиной этого?

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(); 
} 

Могу ли я получить причину, почему он не работает на сервере после развертывания? как заставить его работать на сервере?

+0

Application_Start вызывается только во время первого запроса после повторного использования или запуска. – Seany84

+0

@ Seany84, о котором я знаю. но затем, как сделать эту работу на общем хостинге, где IIS перерабатывает приложения. Как создать одиночный объект, который остается в памяти и выполняет работу. –

+0

@SachinTrivedi, смогли ли вы решить эту проблему? Потому что я столкнулся с той же проблемой –

ответ

1

Вы теряете ссылку на планировщик. Планировщик должен быть долгоживущим объектом в вашем приложении, одноэлемент идеален.

Однако есть проблемы с запуском Quartz.net, встроенным в приложение, поскольку IIS перерабатывает приложения и, таким образом, убьет ваш планировщик.

+0

Это означает, что это проблема с сервером? Есть ли способ программно сохранить мой объект планировщика в живых? Потому что это отлично работает на моем локальном хосте. –

+0

Ваш сервер может вести себя иначе, чем сервер, работающий локально. Сделайте статическую ссылку на планировщик, и это будет поддерживать ее. Например, в опубликованном вами коде, вытащив объявление планировщика из метода Start и сделав его частной статической переменной, должен сделать трюк. Это не идеальный способ сделать это, но это даст вам пример. – jvilalta

+0

Смотрите мой обновленный код согласно вашему предложению. Тем не менее он не работает. –

Смежные вопросы