2013-07-10 3 views
0

Я инициализацией Quartz внутри моей Application_Start() в Globals.asax.cs как следует:Quartz.net с MVC

// construct a scheduler factory 
     ISchedulerFactory schedFact = new StdSchedulerFactory(); 
     IScheduler sched = schedFact.GetScheduler(); 
     sched.Start(); 

     IJobDetail dailyUserMailJob = new JobDetailImpl("DailyUserMailJob", null, typeof(DailyUserMail)); 
     // fire every daye 
     ITrigger dailyUserMailTrigger = new SimpleTriggerImpl("DailyUserMailTrigger", 1, 
               new TimeSpan(1, 0, 0, 0)); 
     sched.ScheduleJob(dailyUserMailJob, dailyUserMailTrigger); 

задание должно выполняться один раз в день, проблема в том, что он работает каждый раз, когда я ударил мой сайт.

любые идеи?

ответ

2

задание должно выполняться один раз в день

Тогда он не должен быть запущен из веб-приложения. Это должно быть что-то вроде консольного приложения, которое запускается в планировщике или, возможно, в службе Windows.

Веб-приложение представляет собой систему запросов/откликов. Он не подходит для текущих фоновых задач или запланированных автономных задач. В основном потому, что вы не контролируете, когда приложение «запускает» или «работает». Веб-сервер управляет этим при управлении ресурсами, и он может остановить/перезапустить веб-приложение по ряду причин.

+0

Я размещаю свой сайт на общем хосте, я не могу этого сделать, какие другие способы я могу выполнить это? – Pacman

+0

@Pacman: Я полагаю, вы могли бы сохранить запись в базе данных, которая указывает, был ли процесс уже запущен в течение текущего дня и проверен на эту запись перед запуском процесса из веб-приложения. Тем не менее, вы должны помнить, что запускаете его из веб-приложения каждый день. Суть в том, что веб-приложения не подходят для выполнения запланированных заданий. – David

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