Я только что добавил quartz.net dll к моему мусорному ведру и запустил мой пример. Как я называю метод C# с помощью quartz.net на основе времени?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Quartz;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(SendMail())
Response.write("Mail Sent Successfully");
}
public bool SendMail()
{
try
{
MailMessage mail = new MailMessage();
mail.To = "test@test.com";
mail.From = "sample@sample.com";
mail.Subject = "Hai Test Web Mail";
mail.BodyFormat = MailFormat.Html;
mail.Body = "Hai Test Web Service";
SmtpMail.SmtpServer = "smtp.gmail.com";
mail.Fields.Clear();
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "redwolf@gmail.com");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "************");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "465");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
SmtpMail.Send(mail);
return (true);
}
catch (Exception err)
{
throw err;
}
}
}
Здесь я просто отправляю почту на загрузке страницы. Как я звоню SendMail()
однажды за день в установленный срок (говорят 6:00), использование quartz.net? Я не знаю, как начать. Если я настраиваю его в моем global.asax
файл? Какое-либо предложение?
Вы пробовали quartz.net tutorial?
Поскольку ваше веб-приложение может быть переработано/перезапущено, вам, вероятно, следует (повторно) инициализировать планировщик quartz.net в обработчике Application_Start в global.asax.cs.
Обновление (с полным примером и некоторыми другими соображениями):
Вот полный пример того, как это сделать с помощью quartz.net. Прежде всего, необходимо создать класс, который реализует интерфейс IJob
, определенный quartz.net. Этот класс вызывается планировщиком quartz.net в заданное время и поэтому должен содержать функциональность отправки почты:
using Quartz;
public class SendMailJob : IJob
{
public void Execute(JobExecutionContext context)
{
SendMail();
}
private void SendMail()
{
// put your send mail logic here
}
}
Далее необходимо инициализировать планировщик quartz.net, чтобы он вызывал ваше задание раз в день в 06:00. Это можно сделать в Application_Start
из global.asax
:
using Quartz;
using Quartz.Impl;
public class Global : System.Web.HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
IScheduler sched = schedFact.GetScheduler();
sched.Start();
// construct job info
JobDetail jobDetail = new JobDetail("mySendMailJob", typeof(SendMailJob));
// fire every day at 06:00
Trigger trigger = TriggerUtils.MakeDailyTrigger(06, 00);
trigger.Name = "mySendMailTrigger";
// schedule the job for execution
sched.ScheduleJob(jobDetail, trigger);
}
...
}
Вот и все. Ваше задание должно выполняться каждый день в 06:00. Для тестирования вы можете создать триггер, который срабатывает каждую минуту (например). Посмотрите на метод TriggerUtils
.
Хотя описанное выше решение может подойти вам, есть одна вещь, которую вы должны учитывать: ваше веб-приложение будет переработано/остановлено, если в течение некоторого времени не будет активности (т.е. не будет активных пользователей). Это означает, что ваша функция отправки почты может быть не выполнена (только если была какая-то активность в то время, когда почта должна быть отправлена).
Поэтому вам следует подумать о других решениях вашей проблемы:
В дополнение к хорошему ответу, предоставленному M4N, вы можете взглянуть на интеграцию spring.net библиотеки quartz.net , которая позволяет вызывать методы без необходимости реализации IJob.