Reference:C5.dll,Common.Logging.dll,Quartz.dll
Global.asax.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; namespace SGSGHome.Web { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { MailScheduler.Instance.Start(); } protected void Application_End(object sender, EventArgs e) { MailScheduler.Instance.Stop(); } } }
MailJob.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data; using Quartz; namespace SGSGHome.Web { public class MailJob : IJob { public void Execute(IJobExecutionContext context) { var client = new ADService.ADServiceClient(); var dt = DBHelper.ExecuteDataTable("select * from MessageQueue where SendDate is null"); foreach (DataRow dr in dt.Rows) { client.SendMail( dr["Title"].ToString(), dr["Body"].ToString(), dr["MailTo"].ToString(), dr["CCTo"].ToString()); DBHelper.ExecuteNonQuery( string.Format("update MessageQueue set SendDate=getdate() where ID={0}", dr["ID"])); } } } }
MailScheduler.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Quartz; using Quartz.Impl; namespace SGSGHome.Web { public class MailScheduler { // First we must get a reference to a scheduler static ISchedulerFactory sf = new StdSchedulerFactory(); static IScheduler sched = sf.GetScheduler(); static MailScheduler _instance = null; static object lockObj = new object(); public static MailScheduler Instance { get { if (_instance == null) { lock (lockObj) { if (_instance == null) { _instance = new MailScheduler(); } } } return _instance; } } public void Start() { // define the job and tie it to our job class IJobDetail job = JobBuilder.Create<MailJob>() .WithIdentity("mailjob", "group1") .Build(); // Trigger the job to run on the next round time ITrigger trigger = TriggerBuilder.Create() .WithIdentity("mailtrigger", "group1") .StartNow() .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever()) .Build(); sched.ScheduleJob(job, trigger); sched.Start(); } public void Stop() { sched.Shutdown(true); } } }