2015-09-11 1 views
0

Я использую Quartz.net на веб-сайте для запуска работы навсегда, и я хочу, чтобы работа выполнялась автоматически на сервере каждые 15 мин.Функция автоматического запуска навсегда C# Quartz.net

Моя проблема, Пользователь не должен посещать сайт до запуска приложения в global.asax перспективе, и она работает, когда пользователь находится на сайте, я хочу запустить работу без посещения сайта и запустить его навсегда без пользователей будут на сайте

Я использую этот код для текущего задания в global.asax

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    SchedulerDemo.Interfaces.ISchedule myTask = new SchedulerDemo.Jobs.HelloSchedule(); 
    myTask.Run(); 
} 
+3

Где вы размещаете свой сайт? У вас есть контроль над сервером, который его размещает? Почему вы хотите запустить его (задание) с веб-сайта? Не можете ли вы использовать [Службу Windows] (https://en.wikipedia.org/wiki/Windows_service) или [Планировщик заданий Windows] (https://en.wikipedia.org/wiki/Windows_Task_Scheduler)? –

+0

Я не очень хорошо знаком с кварцем, но [эти] (http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html) - это направления для Hangfire, который похож на кварц. Многие направления могут быть похожими. – mason

+0

@YacoubMassad правильный. Нет причин для этого делать это код веб-приложения. Это необходимо реализовать, чтобы он мог постоянно выполняться на сервере. Как он упоминает, используйте диспетчер окон или планировщик задач Windows для запуска консольного приложения. –

ответ

0

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

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

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

Затем, все еще в вашем методе Application_Start, вы должны определить излом, и это триггер:

// Instantiating the job 
IJobDetail jobDetail = JobBuilder.Create<MyJob>() 
    .WithIdentity(new JobKey("MyVeryImportantJob", "VeryImportantJobGroup")) 
    .Build(); 

ITrigger jobTrigger = TriggerBuilder.Create() 
    .WithIdentity(new TriggerKey("MyVeryImportantJobTrigger", "VeryImportantJobTriggerGroup")) 
    .WithCronSchedule("* 0/15 * * * ?"") // execute every 15 min (in reality at HH:00, HH:15, HH:30 and HH:45) 
    .Build(); 

И присоединиться два, чтобы запланировать задание

scheduler.ScheduleJob(jobDetail, jobTrigger); 

Планировщик затем будет управлять вашей работой в соответствии с заданным вами триггером (в этом случае каждые 15 мин).

Кроме того, поскольку Quartz.Net будет генерировать выделенный поток для планировщика, это не повлияет на процесс ответа iis, и это предотвратит повторное использование iis-работника, поэтому, когда он будет запущен, он будет работать вечно до тех пор, iis или хост-сервер перезагружается.

После этого, если вы действительно хотите, чтобы ваш планировщик, чтобы начать с веб-сайта без какого-либо запроса на всех, вы можете использовать Provider Service Auto Start (подробнее здесь:

https://www.simple-talk.com/blogs/2013/03/05/speeding-up-your-application-with-the-iis-auto-start-feature/

)

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

  • Нет связанных вопросов^_^