【问题标题】:What is the best way to implement background services for an ASP.NET application?为 ASP.NET 应用程序实现后台服务的最佳方式是什么?
【发布时间】:2010-09-22 06:00:07
【问题描述】:

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

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

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

感谢您的建议。

【问题讨论】:

标签: asp.net architecture deployment


【解决方案1】:

-- 对于夜间报告生成,我会考虑 SQL Reporting Services,因为它们有一些本机订阅服务,允许您通过电子邮件将报告发送给几乎没有自定义代码的用户。

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

【讨论】:

  • 如果您运行的是 SQL 2008,请不要使用通知服务,因为它们已将其删除。
【解决方案2】:

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

我不只是在内部运行应用程序 - 其他人下载它并在他们的网站上运行它,或者在托管公司运行它,因此无需安装服务就可以使部署更容易。

【讨论】:

    【解决方案3】:

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

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

    我是这样做的,它确实有效,但正如我告诉你的那样,它只是一个任务,但如果你看到上面的示例,你会发现它执行了多个任务。

    如您所见,在缓存中您可以随时按时间间隔执行一项任务,夜间任务可以在午夜完成,其他任务每 n 分钟或几小时完成一次。

    希望对你有帮助。

    【讨论】:

      【解决方案4】:

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

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

      请记住,您将无法访问 HttpContext,并且该站点可能会因不活动而关闭。

      【讨论】:

        【解决方案5】:

        老实说,我从来都不喜欢尝试在 ASP.net 进程中模拟 Windows 服务,尤其是当您考虑到创建 Windows 服务是多么容易时。我看到的大多数这样做的尝试都充满了问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-08
          • 1970-01-01
          相关资源
          最近更新 更多