每天一次,我希望我的ASP.NET MVC4网站可能在多台服务器上运行,以便将报告通过电子邮件发送给我。这似乎是一件很常见的事情,但我想要一个很好的方法来做到这一点很困难。如何在ASP.NET MVC网站上执行定期工作?
尝试在服务器上运行计时器来完成这项工作有几个原因是有问题的。如果我有多台服务器,那么我会让计时器在所有服务器上运行(以防服务器故障);我需要在它们之间进行协调,这会变得复杂。此外,试图通过实体框架从后台线程访问数据库增加了复杂性,我必须采用锁定策略来序列化周期性后台线程和“前台”控制器线程之间的DbContext对象的构建/处置。
另一种选择是在服务器上运行一个计时器,但让计时器线程执行一个GET操作,生成一个生成并通过电子邮件发送报告的魔法页面。这解决了DbContext问题,因为数据库访问发生在正常的Controller操作中,并与所有其他Controller访问数据库进行序列化。但是我仍然遇到可能运行多个计时器的问题,所以我需要在Controller动作中使用一些智能来忽略多余的报告请求。
有什么建议吗?这种事情通常如何完成?
快速的答案是,你不应该从网站做到这一点。最简单的解决方案是创建一个可执行文件来为您完成工作并使用任务计划程序进行安排。这取决于您的复杂程度和需求水平,有很多变化,但是从最简单的时间表开始。不要通过网站做到这一点。工作错误的工具。 – Khepri 2013-04-07 06:23:52