Quart.net.net在asp.net网站上设置

ACP*_*ACP 9 c# asp.net scheduled-tasks quartz.net

我刚刚将quartz.net dll添加到我的bin中并启动了我的示例.如何根据时间使用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;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

这里我只是在页面加载时发送邮件.如何SendMail()使用quartz.net在给定时间(比如早上6点)每天拨打一次电话?我不知道怎么开始.我应该在我的global.asax文件中配置它吗?有什么建议吗?

M4N*_*M4N 23

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

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


更新(完整示例和其他一些注意事项):

以下是使用quartz.net完成此操作的完整示例.首先,您必须创建一个实现IJobquartz.net定义的接口的类.此类由quartz.net调度程序在配置的时间调用,因此应包含您的发送邮件功能:

using Quartz;
public class SendMailJob : IJob
{
    public void Execute(JobExecutionContext context)
    {
        SendMail();
    }
    private void SendMail()
    {
        // put your send mail logic here
    }
}
Run Code Online (Sandbox Code Playgroud)

接下来,您必须初始化quartz.net调度程序,以便每天06:00调用您的工作.这可以做到Application_Startglobal.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);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

而已.你的工作应该每天06:00执行.对于测试,您可以创建一个每分钟触发的触发器(例如).看看方法吧TriggerUtils.

虽然上述解决方案可能对您有用,但您应该考虑以下事项:如果一段时间内没有活动(即没有活动用户),您的Web应用程序将被回收/停止.这意味着您的发送邮件功能可能不会被执行(只有在应该发送邮件的时候有一些活动).

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

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