在预定时间发送电子邮件报告
本文关键字:电子邮件 报告 定时间 | 更新日期: 2023-09-27 18:16:30
我正在做一个大型的asp.net网站。我想安排一些报告,每周/每月通过电子邮件发送给我的客户。我正在考虑使用windows服务并使用计时器。这是最好的选择吗?
你可以使用Hangfire
描述来自http://hangfire.io«一种简单的方法来执行"立即走人"、延迟和反复出现的任务在ASP。网络应用程序。不需要Windows服务。支持的持久存储。开放和免费用于商业用途。»
它允许你像这样安排任务:
RecurringJob.AddOrUpdate(() => MyReport.Run(), Cron.Weekly(DayOfWeek.Monday));
其中MyReport.Run()
是一个静态方法,负责呈现和通过电子邮件发送报告。
我认为windows服务是最好的选择,尽管我个人不会使用计时器。
我们处理这个问题的方法是让主服务工作循环空闲1/2秒,然后检查是否需要运行任何报告。
在这个设计中有一个非常重要的考虑:为了防止单个报告使你的服务崩溃,你应该做几件事:
1)在单独的线程中运行所有报告(使用backdworker或管理自己的线程)。
2)一次只启动一定数量的报告。在循环中,跟踪正在运行的报告,当一个报告停止时,开始下一个报告。最大数量将取决于报告的强度和服务器的容量。