到期通知

时间:2013-04-10 12:09:08

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

从购买之日起12个月后向客户发送通知电子邮件的最简单方法是什么?

我们的Web服务器运行连接到SQL Server的ASP.NET MVC 3网站。目前,我们每周一手动运行一个网页,通知过期的用户。

以下是我到目前为止所考虑的选项:

  1. 使用任务计划程序每日运行网页
  2. 构建一个持续检查计时器并最终发送通知的控制台应用程序
  3. 构建像2这样的Windows服务,如果发生故障,可以自动重启
  4. 我错过了一些更容易的东西吗?

    感谢。

1 个答案:

答案 0 :(得分:0)

我以前的公司遇到过同样的问题。最后我们去了Task Scheduler。主要原因是任务计划程序是处理Windows中重复性任务的标准机制,因此将来比其他选项更易于维护。

我们的控制台应用程序每天都由Task Scheduler运行,它被设计为“智能”。我的意思是聪明。

  • 控制台应用程序是一个调用WCF服务的虚拟应用程序。所有逻辑都在WCF服务中。原因是将所有代码保存在同一个地方。
  • 如果运行失败,请在我们的系统日志中写入警报(每天检查一次,它是一个数据库表)。如果发生灾难性故障(无法访问数据库),我们会在控制台应用程序目录中写入文件。
  • 如果它已在进行中,则不允许运行第二个实例(某种单例)
  • 它会在数据库中跟踪发送的电子邮件,如果在同一天执行两次,只有第一次发送电子邮件。
  • 它有一个 / whatif 参数
  • 如果电子邮件失败,则会记录该邮件并继续处理。
  • 如果必须发送多封电子邮件并在某个时刻失败,则下一次执行将从停止的点开始。

内部代码类似于

Linq to get all the users that deserved an email
For each user
  Send the email, mark it as sent in DB and close transaction
  If email fails Write to log.
Next
Write log with stats

这种方式比较慢但更安全。如果它必须向4000个用户发送电子邮件而在用户1337中失败,那么我们会记录发生的事情并在下次执行时从1338恢复。

在一个文件夹中的系统日志中,我们通常每天都有一个条目,例如:

  

电子邮件流程由Scheduler在02:00开始。发送了4000封电子邮件,0封失败。

如果出现问题:

  

电子邮件流程由Scheduler在02:00开始。发送了3999封电子邮件,1封失败。   向用户xxxxx发送电子邮件失败。原因:电子邮件地址“joeBlogs @@ gmail.com”不正确。