.net 选择用于发送每周更新的用户

.net 选择用于发送每周更新的用户,.net,asp.net-mvc,scheduled-tasks,scheduling,.net,Asp.net Mvc,Scheduled Tasks,Scheduling,在我正在进行的项目中,用户可以自己订阅课程。课程的持续时间是可变的,以周为单位计算(因此4周、5周或6周)。他们可以在任何给定时刻订阅,因此每个用户的开始日期不同 现在,我想在每周开始时向用户发送一封个性化的电子邮件(因此,当他们进入第二周、第三周等)。电子邮件每周都不一样 我知道我必须定期编写任务和计划,但我不确定如何选择正确的用户。我可以编写一个SQL命令,选择开始日期为7、14、21或28天前的所有用户,并计算他们所处的星期,但这似乎很容易出错(如果任务失败,那么他们在下一个任务周期中将不

在我正在进行的项目中,用户可以自己订阅课程。课程的持续时间是可变的,以周为单位计算(因此4周、5周或6周)。他们可以在任何给定时刻订阅,因此每个用户的开始日期不同

现在,我想在每周开始时向用户发送一封个性化的电子邮件(因此,当他们进入第二周、第三周等)。电子邮件每周都不一样


我知道我必须定期编写任务和计划,但我不确定如何选择正确的用户。我可以编写一个SQL命令,选择开始日期为7、14、21或28天前的所有用户,并计算他们所处的星期,但这似乎很容易出错(如果任务失败,那么他们在下一个任务周期中将不会收到消息)

实现这一目标的最佳方式是什么


该项目是一个C#中的ASP.NET MVC应用程序,IIS上有NHibernate。

您所说的是安排在未来日期和时间发生的工作流。这最好由调度程序处理

从概念上来说,您定义了需要做什么以及什么时候需要做。由于IIS将关闭网站,如果网站上没有用户在IIS中承载此过程,这不是一个好主意。windows服务将是更好的选择。这样,它总是在后台运行,随时可以执行命令

调度器的实现可以简单到将操作存储在数据库中,并按定时间隔查询数据库,执行本应发生的任务

另一个选择是将调度框架集成到您的服务中,如

编辑: 你目前设想的是一个应该发生什么的隐含定义。换言之,在发送提醒时,您可以计算何时以及应通知谁


而是在用户注册课程时计算这些值,并将其保存为显式事件。您需要的一切都已经存储在事件中,剩下的就是确定应该触发哪些事件。这应该很容易:任何本应该已经触发但没有触发的事件。一旦触发,删除事件。

您所说的是安排在未来日期和时间发生的工作流。这最好由调度程序处理

从概念上来说,您定义了需要做什么以及什么时候需要做。由于IIS将关闭网站,如果网站上没有用户在IIS中承载此过程,这不是一个好主意。windows服务将是更好的选择。这样,它总是在后台运行,随时可以执行命令

调度器的实现可以简单到将操作存储在数据库中,并按定时间隔查询数据库,执行本应发生的任务

另一个选择是将调度框架集成到您的服务中,如

编辑: 你目前设想的是一个应该发生什么的隐含定义。换言之,在发送提醒时,您可以计算何时以及应通知谁


而是在用户注册课程时计算这些值,并将其保存为显式事件。您需要的一切都已经存储在事件中,剩下的就是确定应该触发哪些事件。这应该很容易:任何本应该已经触发但没有触发的事件。一旦触发删除事件。

“如果任务失败,那么他们在下一个任务周期中将不会收到消息”如果要自动恢复,则应选择在过去28天内开始的所有用户,即使不完全是7天,并登录到单独的表“在日期Y发送用户电子邮件X”然后检查是否有任何未发送的电子邮件。或者制作该手册:向管理员发送任何故障警报,然后介入并在当天进行修复。“如果任务失败,那么他们在下一个任务周期内将不会收到消息”如果要自动恢复,则应选择在过去28天内启动的所有用户,即使不完全是7天,并登录一个单独的表格“在日期Y发送用户电子邮件X”,然后检查是否有任何未发送的电子邮件。或者制作手册:如果出现任何故障,请向管理员发送警报,然后介入并在当天进行修复。谢谢您的回复,但我的主要问题更多的是用户的选择,而不是计划部分。但设置Windows服务确实比IIS进程更好。thanx的石英链接似乎很有趣。我最终在你的编辑中使用了你的建议。谢谢你的回复,但我的主要问题更多的是关于用户的选择,而不是日程安排部分。但设置Windows服务确实比IIS进程更好。thanx的石英链接似乎很有趣。我最终在你的编辑中使用了你的建议。谢谢