为ASP.NET应用程序实现后台服务的最佳方法是什么?

时间:2008-11-13 21:27:13

标签: asp.net architecture deployment

我的ASP.NET应用程序需要许多支持服务才能在后台定期运行。例如:

  • 我需要每1-5分钟查询一次数据库(或缓存),识别过期的工作项并通过电子邮件通知用户
  • 我需要生成每晚报告,然后通过电子邮件发送给订阅者
  • 加上其他系统/非用户管理任务

实施这些服务的最佳方式是什么?我应该将它们作为Web应用程序的一部分包含在内,在Application_Start()中启动每个“服务”的实例吗?或者将它们创建为实际的独立服务?如果他们是Web应用程序的一部分,我可以利用我的缓存数据存储,但这种方法是否有任何缺点?

感谢您的任何建议。

5 个答案:

答案 0 :(得分:6)

今年我需要实现一个任务来缓存数据库中的一些数据,它必须每隔n分钟验证一次更改的代码,我发现这篇非常好的文章;

Simulate a Windows Service using ASP.NET to run scheduled jobs

我是这样做的,但它确实有效,但正如我告诉你的那样,这只是一项任务,但如果你看到上面的例子,就可以看到它执行了几项任务。

正如您所看到的,在缓存中您可以随时和间隔执行任务,夜间任务可以在午夜完成,其他任务可以每n分钟或几小时完成。

希望它有所帮助。

答案 1 :(得分:1)

- 对于夜间报告生成,我会研究SQL Reporting Services,因为它们有一些本地订阅服务,允许您通过虚拟无需自定义代码的用户通过电子邮件发送报告。

- 对于逾期工作项通知,您可以使用SSRS(如上所述)向他们发送包含过期项目的报告,或者,如果您运行的是SQL 2k5,则使用Notification Services。

答案 2 :(得分:1)

我在我的ASP.NET应用程序中定期执行工作线程和线程,我没有遇到任何问题。

我不只是在内部运行应用程序 - 其他人下载并在他们的网站上运行它,或者在托管公司运行它,所以在不要求安装服务的情况下执行操作会使部署更容易。

答案 3 :(得分:1)

与后台工作人员合并的计时器对我来说效果很好:

Timer timer = new Timer(intervalSeconds * 1000)
timer.Elapsed += delegate
{
    // do the meat
};
timer.Start();

请注意,您将无法访问HttpContext,并且该网站可能因不活动而关闭。

答案 4 :(得分:0)

老实说,我从未想过尝试在ASP.net进程中模拟Windows服务,特别是考虑到创建Windows服务是多么容易。我所看到的大部分尝试都充满了问题。