【问题标题】:Should I use a Windows Service or an ASP.NET Background Thread?我应该使用 Windows 服务还是 ASP.NET 后台线程?
【发布时间】:2010-11-02 17:20:36
【问题描述】:

我正在用 ASP.NET 3.5 编写一个 Web 应用程序,它负责一些基本的数据输入方案。应用程序还有一个组件需要不断地轮询一些数据并根据业务逻辑执行操作。

实现“轮询”组件的最佳方式是什么?它需要每隔几分钟左右运行并检查一次数据。

过去我见过几个不同的选择:

  1. Web 应用程序启动一个后台线程,该线程将始终在 Web 应用程序运行时运行。 (我看到的实现在 Application_Start 事件中启动了线程。)
  2. 创建始终运行的 Windows 服务

这些选项有什么好处?还有其他选择吗?

我倾向于使用 Windows 服务,因为它是独立的,可以在不同的服务器上运行(更具可扩展性),并且可以更好地控制它的启动/停止时间等。但是,我觉得它的紧凑性在 Web 应用程序的进程中运行“后台”逻辑可能会使整个解决方案更易于理解。

【问题讨论】:

    标签: asp.net windows-services


    【解决方案1】:

    我选择单独的 Windows 服务主要是出于您给出的原因:

    • 如有必要,您可以在不同的服务器上运行它。
    • 您可以独立于网站启动和停止它。

    我还要补充一点,它很可能会对网站本身的性能产生一些影响——这是你想要避免的。

    这里的流行词是“关注点分离”。网站负责将数据呈现给用户,服务负责检查数据的完整性。

    如果需要,您还可以独立更新网站和服务。

    我打算建议您查看计划任务并让 Windows 控制进程何时运行,但我重新阅读了您的问题并指出您希望每隔几分钟运行一次检查。在这种情况下,启动进程的开销可能太大了 - 尽管一些实验可能会以这种或另一种方式证明这一点。

    如果您使用计划任务,您还可以在当前检查完成之前开始下一次检查 - 如果您完全控制的话,您可以编写代码。

    【讨论】:

      【解决方案2】:

      为什么不直接使用没有 ui 的控制台应用程序?可以做所有 Windows 服务可以做的事情,而且更容易调试和维护。除非您绝对必须这样做,否则我不会提供 Windows 服务。

      【讨论】:

      • 您可以编写和调试您的控制台应用程序,然后将其作为 Windows 服务运行,从而两全其美。
      • 我想说这个,但找不到词。
      • 每次您想要进行任何更改时,您仍然会遇到启动/停止/安装/卸载的问题......您可以在用户未登录时运行控制台应用程序...... . 唯一的问题是使用提升的权限运行(Windows 服务可以做到)
      • 不是问题——您可以设置计划任务的标识,这样您就可以使用您可以创建的任何权限运行。
      【解决方案3】:

      在这种情况下,控制台应用程序表现不佳。我编写了一个 TAPI 应用程序,它必须留在后台并拦截来电。但它只执行了一次,因为 Tapi 管理器被 GCed 并且永远无法处理第二个来电。

      【讨论】:

        【解决方案4】:

        您可能会发现 SQL Server 作业调度程序足以满足您的需求。

        【讨论】:

        • 这听起来像是个主意。请提供更多细节。
        • 被轮询的数据可能无论如何都在数据库中,因此在数据库中执行轮询检查是有意义的。在共享主机中设置 SQL 作业比安装 Windows 服务更容易,并且总是会运行,不像 ASP.NET 后台线程,当应用程序在不活动 20 分钟后关闭时,应用程序会随着应用程序死亡(取决于设置,等等)。然后,SQL 作业可以回调到站点以在必要时执行所需的操作。
        • 优秀的积分!此链接显示如何创建作业:msdn.microsoft.com/en-us/library/ms186273.aspx 此链接显示如何安排作业:msdn.microsoft.com/en-us/library/ms191439.aspx
        • 查看此链接,了解有关 Windows 服务与 SQL Server 作业的良好讨论:stackoverflow.com/questions/250518/windows-service-or-sql-job
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-24
        • 2011-11-12
        • 2011-05-14
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多