Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该使用Windows服务还是ASP.NET后台线程?_Asp.net_Windows Services - Fatal编程技术网

我应该使用Windows服务还是ASP.NET后台线程?

我应该使用Windows服务还是ASP.NET后台线程?,asp.net,windows-services,Asp.net,Windows Services,我正在用ASP.NET3.5编写一个web应用程序,它处理一些基本的数据输入场景。应用程序中还有一个组件需要不断轮询一些数据,并根据业务逻辑执行操作 实现“轮询”组件的最佳方式是什么?它需要每隔几分钟左右运行并检查数据 我在过去看到过两种不同的选择: web应用程序启动一个后台线程,该线程将在web应用程序启动时始终运行。(我看到的实现在应用程序启动事件中启动了线程。) 创建始终运行的windows服务 这两种选择的好处是什么?还有其他选择吗 我倾向于使用windows服务,因为它是分离的,可以

我正在用ASP.NET3.5编写一个web应用程序,它处理一些基本的数据输入场景。应用程序中还有一个组件需要不断轮询一些数据,并根据业务逻辑执行操作

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

我在过去看到过两种不同的选择:

  • web应用程序启动一个后台线程,该线程将在web应用程序启动时始终运行。(我看到的实现在应用程序启动事件中启动了线程。)
  • 创建始终运行的windows服务
  • 这两种选择的好处是什么?还有其他选择吗


    我倾向于使用windows服务,因为它是分离的,可以在不同的服务器上运行(更具可扩展性),并且可以更好地控制何时启动/停止,等等。然而,我感觉拥有“后台”的紧凑性web应用程序过程中运行的逻辑可能会使整个解决方案更易于理解。

    我选择单独的Windows服务,主要原因如下:

    • 如果需要,您可以在其他服务器上运行它
    • 您可以独立于网站启动和停止它
    我还想补充一点,它可能会对网站本身的性能产生一些影响,这是您希望避免的

    这里的流行语是“关注点分离”。网站负责向用户展示数据,服务负责检查数据的完整性

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

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


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

    为什么不使用没有ui的控制台应用程序?可以完成windows服务所能做的一切,并且更易于调试和维护。除非您必须这样做,否则我不会使用windows服务。

    在这种情况下,控制台应用程序做得不好。我编写了一个TAPI应用程序,它必须留在后台拦截来电。但它只做了一次,因为tapi管理器获得了GCed,并且在第二次来电时无法使用。

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

    您可以编写和调试控制台应用程序,然后将其作为windows服务运行,从而实现这两个方面的最佳效果。我想说的是,但找不到文字。每次要进行任何更改时,您仍会遇到启动/停止/安装/卸载的问题。。。您可以在用户未登录时运行控制台应用程序。。。唯一的问题是使用提升的权限运行(windows服务可以做到这一点)并不是真正的问题——您可以设置计划任务的标识,这样您就可以使用您可以创建的任何权限运行。这听起来不错。请提供更多详细信息。被轮询的数据可能在数据库中,因此在数据库中执行轮询检查是有意义的。在共享主机中设置SQL作业比安装windows服务更容易,并且始终会运行,这与ASP.NET后台线程不同,ASP.NET后台线程在应用程序停止运行20分钟后(取决于设置等)将随应用程序一起关闭。SQL作业可以在必要时回调到站点以执行所需的操作。非常好!此链接显示如何创建作业:此链接显示如何安排作业:并查看此链接,了解有关Windows服务与SQL Server作业的详细讨论: