用于发送每小时状态电子邮件的任何现有项目/软件

时间:2012-01-12 20:17:12

标签: asp.net-mvc windows-server-2008

检查系统状态和通知用户的经典要求。具体来说,我将每隔x个时间点击一次数据库,获取一些数据,然后根据结果发送电子邮件通知。哎呀,这项服务甚至可能不会发送电子邮件,而是在数据库中创建通知记录。

似乎与IOC和配置一样,可以有一个通用的Windows服务,以简单的方式管理所有这些,以及指标和管理。

过去我通过以下方式完成了电子邮件通知: 1)将脚本作为cron(在Windows上)作业运行 2)将自定义可执行文件作为cron / at jobs运行 3)使用SQLServer的DatabaseMail之类的东西。 4)自定义NT服务,一直运行监视事物。

是否有任何开源项目可以管理这个?这是我在各种平台上写过很多次的代码类型,但现在不想花几天时间来完成它。

到目前为止我唯一发现的是Quartz.Net

由于

1 个答案:

答案 0 :(得分:0)

我只是创建一个Windows服务并使用Reactive Extensions来安排任务。如果您不需要像cron提供的那么多灵活性,这可以正常工作。这是一个抽象的每小时任务运行器。 (使用log4net)

public abstract class HourlyTask : IWantToRunAtStartup
{
    protected readonly ILog Log = LogManager.GetLogger(typeof (HourlyTask).FullName);
    private IDisposable _Subscription;

    private void ExecuteWithLog()
    {
        Log.Debug("Triggering " + GetType());
        try
        {
            Execute();
        }
        catch (Exception exception)
        {
            Log.Error("Hourly execution failed", exception);
        }
    }

    public abstract void Execute();

    public void Run()
    {
        _Subscription = Observable
            .Interval(TimeSpan.FromMinutes(1))
            .Select(x => DateTime.Now.Hour)
            .DistinctUntilChanged()
            .Subscribe(i => ExecuteWithLog());
    }

    public void Stop()
    {
        if (_Subscription == null)
        {
            return;
        }
        _Subscription.Dispose();
    }
}

然后,在启动方法中,您只需解析所有IWantToRunAtStartup个实例,然后在其上调用Run()