Quartz.net安装在一个asp.net网站

我刚刚添加quartz.net DLL到我的箱子,并开始我的例子。 如何使用基于时间的quartz.net调用C#方法?

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; } } } 

在这里,我只是发送一个邮件页面加载。 在给定的时间(比如上午6点),如何使用quartz.net在一天内调用SendMail()一次? 我不知道如何开始。 我应该在我的global.asax文件中configuration它吗? 任何build议?

你有没有尝试quartz.net教程 ?

由于您的Web应用程序可能会被回收/重新启动,因此您应该重新初始化global.asax.cs中的Application_Start处理程序中的quartz.net调度程序。


更新 (完整的例子和一些其他的考虑):

这是一个完整的例子,如何使用quartz.net来做到这一点。 首先,你必须创build一个实现IJob定义的IJob接口的类。 这个类由quartz.net调度程序在configuration的时间调用,因此应包含您的发送邮件function:

 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调用一次您的工作。 这可以在global.asax Application_Start中完成:

 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执行。 为了testing,你可以创build一个触发器,每分钟触发(例如)。 看看TriggerUtils的方法。

虽然上面的解决scheme可能适用于您,但您应该考虑一件事情:如果一段时间内没有活动(即没有活动用户),您的Web应用程序将被回收/停止。 这意味着您的发送邮件function可能不会被执行(只有当邮件应该发送的时候有一些活动)。

因此,您应该考虑针对您的问题的其他解决scheme:

  • 你可能想要实现一个Windows服务来发送你的电子邮件(Windows服务将始终运行)
  • 或者更容易:在一个小型控制台应用程序中实现您的发送邮件function,并在Windows中设置一个计划任务,以便在需要的时间每天一次调用您的控制台应用程序。

除了M4N提供的好的答案之外,你可以看看quartz.net集成的lib ,它允许调用方法,而不需要实现IJob。

我在寻找石英。 我为我的工作做这个工作:

1:从可视化控制台安装Quartz:

PM>安装包装石英

2:创build一个这样的类:

 using Quartz; public class Quartz : IJob { public void Execute(IJobExecutionContext context) { //do some } } 

在全球

 using Quartz; using Quartz.Impl; protected void Application_Start(object sender, EventArgs e) { //for start time at first run after 1 hour DateTimeOffset startTime = DateBuilder.FutureDate(1, IntervalUnit.Hour); IJobDetail job = JobBuilder.Create<Quartz>() .WithIdentity("job1") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1") .StartAt(startTime) .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).WithRepeatCount(2)) .Build(); ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sc = sf.GetScheduler(); sc.ScheduleJob(job, trigger); sc.Start(); } 

是每隔10秒钟做3次的代码。 祝你好运