.net网站BackgroundWorker。这是个好主意吗?

时间:2009-10-05 16:31:47

标签: .net backgroundworker

我计划在我的.net网站上使用BackgroundWorker,每晚12点进行一些数据库维护。让asynch进程监控时间并执行操作是一个好主意吗?我使用sql server express edition,所以我不能在数据库端使用任何调度。我也不想使用Windows任务调度程序

4 个答案:

答案 0 :(得分:7)

为什么不想使用Windows调度程序?这是最明显的解决方案 - 毕竟,你想要定期安排一些事情。

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

不会建议你创建ASP.NET站点的这一部分。考虑到AppDomain回收等方面的所有案例,这太棘手了(IMO)。

答案 1 :(得分:2)

AFAIK根本无法使用ASP.NET运行时安排作业,没有API可以让您这样做。 ASP.NET运行时是一种被动服务;它响应HTTP请求,提供响应,然后有效地休眠直到下一个请求。它还保留随时创建和销毁AppDomains和对象的权利,以履行其记忆压力义务。

您的选择是:

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

如果所有这些选项都被拒绝了,那么我恐怕你运气不好。遗憾。

答案 2 :(得分:1)

没有。使用计划任务。

答案 3 :(得分:0)

根据我的经验,尝试从Web应用程序中执行这些类型的操作是非常不可靠的。

由于各种原因,Web服务器比其他服务器更容易重置。您会发现计划任务(甚至是启动SQL脚本的简单批处理文件,或执行托管代码或非托管代码的DLL)都更加可靠。此外,正如Jon所指出的那样,安排它们并且能够相信它们在你想要它们时已经执行了很容易,你对调度机制有更高的信心,因为你没有必要构建它,测试它,并自己部署。

我知道在Jon的评论中你说过你自己无法访问服务器。但是,如果可以的话,找到一种方法来为获取该访问权做出令人信服的论证。如果这是一个关键过程,那么您将需要它。就我而言,系统完整性 - 特别是涉及数据时 - 始终是一个引人注目的论点。