代码之家  ›  专栏  ›  技术社区  ›  nLL

.NET网站后台工作人员。这是个好主意吗?

  •  0
  • nLL  · 技术社区  · 15 年前

    我计划在我的.NET网站上使用BackgroundWorker在每天晚上12:00执行一些数据库维护。让异步进程监视时间并执行操作是一个好主意吗?我正在使用SQL Server Express Edition,因此无法在数据库端使用任何调度。我也不想使用Windows任务计划程序

    4 回复  |  直到 15 年前
        1
  •  7
  •   Jon Skeet    15 年前

    为什么不使用Windows计划程序?这是最明显的解决方案——毕竟,你想定期安排一些事情发生。

    否则,我建议可能使用Windows服务和计时器(system.timers.timer或system.threading.timer)。您需要考虑夏令时的可能性以及类似的事情——这是使用内置调度程序的一个原因。

    不会 建议将此部分设置为ASP.NET网站。想一想AppDomain回收等所有角落的案例太难了。

        2
  •  2
  •   Christian Hayter    15 年前

    Afaik您根本无法使用ASP.NET运行时计划作业,没有API允许您这样做。ASP.NET运行时是一个反应式服务;它对HTTP请求作出反应,提供响应,然后有效地休眠到下一个请求。它还保留随时创建和销毁AppDomain和对象以满足其内存压力义务的权利。

    您的选择是:

    • Windows计划程序
    • SQL Server计划程序
    • 一个自定义的Windows服务(它有效地模拟了Windows调度程序,因此没有太多意义)

    如果所有的选择都被拒绝了,那么恐怕你运气不好。对不起的。

        3
  •  1
  •   wefwfwefwe    15 年前

    不。使用计划任务。

        4
  •  0
  •   Mike Hofer    15 年前

    根据我的经验,从一个网络应用程序尝试做这些类型的事情是非常不可靠的。

    由于各种原因,Web服务器比其他服务器更容易重置。您会发现计划的任务(甚至是启动SQL脚本的简单批处理文件,或者执行托管或非托管代码的DLL)更可靠。此外,正如jon所指出的,对它们进行调度,并且能够相信它们在您希望它们执行的时候已经执行了,这是一个很快的过程,而且您对调度机制有更高的信心,因为您不必构建它、测试它并自己部署它。

    我知道在乔恩的评论中,你说过你自己无法访问服务器。但是如果你能,找到一种方法来说服 获取访问权限。 如果这是一个关键的过程,你就需要它。就我而言,系统完整性——尤其是在数据方面——总是一个令人信服的论点。