Как пользоваться Quartz.net с помощью ASP.NET
Я не знаю, как использовать кварц.dll в ASP.NET. где написать код для планирования заданий для запуска почты каждое утро? Пожалуйста, если какой-то орган знает об этом, пожалуйста, помогите мне...
Edit: нашел как использовать Quartz.NET В про способе? чтобы быть действительно полезным.
2 ответов:
у вас есть несколько вариантов, в зависимости от того, что вы хотите сделать и как вы хотите установить его. Например, вы можете установить Quartz.Net сервер как автономная служба windows или вы также можете встроить его в свой asp.net применение.
Если вы хотите запустить его встроенным, то вы можете запустить сервер, скажем, ваш глобальный.asax, как это (из примеров исходного кода, пример #12):
NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "RemoteServer"; // set thread pool info properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.threadPool.threadCount"] = "5"; properties["quartz.threadPool.threadPriority"] = "Normal"; ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); sched.Start();Если вы запустите его как сервис, вы будете подключаться к нему удаленно, как это (из примера #12):
NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "RemoteClient"; // set thread pool info properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.threadPool.threadCount"] = "5"; properties["quartz.threadPool.threadPriority"] = "Normal"; // set remoting expoter properties["quartz.scheduler.proxy"] = "true"; properties["quartz.scheduler.proxy.address"] = "tcp://localhost:555/QuartzScheduler"; // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler();Если у вас есть ссылка на планировщик (будь то через Remoting или потому что у вас есть встроенный экземпляр) вы можете планировать задания вроде этого:
// define the job and ask it to run JobDetail job = new JobDetail("remotelyAddedJob", "default", typeof(SimpleJob)); JobDataMap map = new JobDataMap(); map.Put("msg", "Your remotely added job has executed!"); job.JobDataMap = map; CronTrigger trigger = new CronTrigger("remotelyAddedTrigger", "default", "remotelyAddedJob", "default", DateTime.UtcNow, null, "/5 * * ? * *"); // schedule the job sched.ScheduleJob(job, trigger);вот ссылка на некоторые сообщения, которые я написал для людей, приступающих к работе Quartz.Net: http://jvilalta.blogspot.com/2009/03/getting-started-with-quartznet-part-1.html
несколько недель назад я писал об использовании Quartz.Net планирование заданий в рабочих ролях Windows Azure. С тех пор я столкнулся с требованием, которое подтолкнуло меня создать оболочку вокруг Quartz.Net метода ischeduler. JobSchedule отвечает за чтение строки расписания из CloudConfigurationManager и планирование задания.
CloudConfigurationManager считывает параметры из файла конфигурации роли, который можно редактировать через портал управления Windows Azure в разделе Настройка облачных служб.
следующий пример будет планировать работу, которая должна быть выполнена каждый день в 6 утра, 8 утра, 10 утра, 12:30 вечера и в 4:30 вечера. Расписание определяется в параметрах роли, которые можно редактировать с помощью Visual Studio. Чтобы перейти к параметрам роли, перейдите в проект облачной службы Windows Azure и найдите нужные конфигурации ролей в папке роли. Откройте редактор конфигурации, дважды щелкнув файл конфигурации, затем перейдите на вкладку "Настройки". Нажмите на кнопку "добавить настройку’ и назовите новую настройку "JobDailySchedule" и установите ее значение 6:0;8:0;10:0;12:30;16:30;
The code from this Post is part of the Brisebois.WindowsAzure NuGet Package To install Brisebois.WindowsAzure, run the following command in the Package Manager Console PM> Install-Package Brisebois.WindowsAzure Get more details about the Nuget Package.затем с помощью JobSchedule запланируйте ежедневное задание, используя расписание, определенное в файле конфигурации роли.
var schedule = new JobSchedule(); schedule.ScheduleDailyJob("JobDailySchedule", typeof(DailyJob));реализация DailyJob идет следующим образом. Поскольку это демо, я не буду добавлять какую-либо конкретную логику в работу.
public class DailyJob : IJob { public void Execute(IJobExecutionContext context) { //Do your daily work here } }рабочий график обертывает Quartz.Net Метода ischeduler. В предыдущем посте я говорил о важности упаковки ваших сторонних инструментов, это отличный пример, потому что я содержу логику планирования заданий, и я мог бы потенциально изменить эту логику, не влияя на код, который использует JobSchedule.
JobSchedule должен быть настроен при запуске роли, и экземпляр JobSchedule должен поддерживаться в течение всего срока службы роли. Изменение расписания может быть достигнуто путем изменения Параметр "JobDailySchedule" через портал управления Windows Azure в разделе Настройка облачных служб. Затем, чтобы применить новое расписание, перезапустите экземпляр роли через портал управления Windows Azure в разделе экземпляры облачных служб.
public class JobSchedule { private readonly IScheduler sched; public JobSchedule() { var schedFact = new StdSchedulerFactory(); sched = schedFact.GetScheduler(); sched.Start(); } /// <summary> /// Will schedule jobs in Eastern Standard Time /// </summary> /// <param name="scheduleConfig">Setting Key from your CloudConfigurations, /// value format "hh:mm;hh:mm;"</param> /// <param name="jobType">must inherit from IJob</param> public void ScheduleDailyJob(string scheduleConfig, Type jobType) { ScheduleDailyJob(scheduleConfig, jobType, "Eastern Standard Time"); } /// <param name="scheduleConfig">Setting Key from your CloudConfigurations, /// value format "hh:mm;hh:mm;"</param> /// <param name="jobType">must inherit from IJob</param> public void ScheduleDailyJob(string scheduleConfig, Type jobType, string timeZoneId) { var schedule = CloudConfigurationManager.GetSetting(scheduleConfig); if (schedule == "-") return; schedule.Split(';') .Where(s => !string.IsNullOrWhiteSpace(s)) .ToList() .ForEach(h => { var index = h.IndexOf(':'); var hour = h.Substring(0, index); var minutes = h.Substring(index + 1, h.Length - (index + 1)); var job = new JobDetailImpl(jobType.Name + hour + minutes, null, jobType); var dh = Convert.ToInt32(hour, CultureInfo.InvariantCulture); var dhm = Convert.ToInt32(minutes, CultureInfo.InvariantCulture); var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); var cronScheduleBuilder = CronScheduleBuilder .DailyAtHourAndMinute(dh, dhm) .InTimeZone(tz); var trigger = TriggerBuilder.Create() .StartNow() .WithSchedule(cronScheduleBuilder) .Build(); sched.ScheduleJob(job, trigger); }); } /// <summary> /// Will schedule jobs in Eastern Standard Time /// </summary> /// <param name="scheduleConfig">Setting Key from your CloudConfigurations, /// value format "hh:mm;hh:mm;"</param> /// <param name="jobType">must inherit from IJob</param> public void ScheduleWeeklyJob(string scheduleConfig, Type jobType) { ScheduleWeeklyJob(scheduleConfig, jobType, "Eastern Standard Time"); } /// <param name="scheduleConfig">Setting Key from your CloudConfigurations, /// value format "hh:mm;hh:mm;"</param> /// <param name="jobType">must inherit from IJob</param> public void ScheduleWeeklyJob(string scheduleConfig, Type jobType, string timeZoneId) { var schedule = CloudConfigurationManager.GetSetting(scheduleConfig); schedule.Split(';') .Where(s => !string.IsNullOrWhiteSpace(s)) .ToList() .ForEach(h => { var index = h.IndexOf(':'); var hour = h.Substring(0, index); var minutes = h.Substring(index + 1, h.Length - (index + 1)); var job = new JobDetailImpl(jobType.Name + hour + minutes, null, jobType); var dh = Convert.ToInt32(hour, CultureInfo.InvariantCulture); var dhm = Convert.ToInt32(minutes, CultureInfo.InvariantCulture); var tz = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); var builder = CronScheduleBuilder .WeeklyOnDayAndHourAndMinute(DayOfWeek.Monday, dh, dhm) .InTimeZone(tz); var trigger = TriggerBuilder.Create() .StartNow() .WithSchedule(builder) .Build(); sched.ScheduleJob(job, trigger); }); } }
Comments