Quartz.net устанавливает в веб-сайте asp.net

Я только что добавил 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 файл? Какое-либо предложение?

9
задан Null 13 July 2015 в 19:51
поделиться

2 ответа

Вы пробовали 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.

Хотя описанное выше решение может подойти вам, есть одна вещь, которую вы должны учитывать: ваше веб-приложение будет переработано/остановлено, если в течение некоторого времени не будет активности (т.е. не будет активных пользователей). Это означает, что ваша функция отправки почты может быть не выполнена (только если была какая-то активность в то время, когда почта должна быть отправлена).

Поэтому вам следует подумать о других решениях вашей проблемы:

  • вы можете реализовать службу windows для отправки писем (служба windows всегда будет запущена)
  • или гораздо проще: реализуйте функцию отправки почты в небольшом консольном приложении, и установите запланированную задачу в windows, чтобы вызывать консольное приложение раз в день в нужное время.
23
ответ дан 4 December 2019 в 09:35
поделиться

В дополнение к хорошему ответу, предоставленному M4N, вы можете взглянуть на интеграцию spring.net библиотеки quartz.net , которая позволяет вызывать методы без необходимости реализации IJob.

2
ответ дан 4 December 2019 в 09:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: