如何在ASP.NET Web服务中使用System.Threading.Timer

use*_*064 5 c# asp.net service timer web

背景: 我有一个用C#编写的在Windows Server 2008上运行的.NET 4.0 Web服务。我想在每天运行一次代码的asp.net Web服务中运行一个计时器。我听说过一些限制(请参阅下文),但是我想问一下我打算做什么,以便克服一些限制并将代码保留在Web服务中,因为它不是关键任务代码。但是,崩溃是不可接受的。注意:我不是,也不能使用WCF。

计划:

  • System.Threading.Timer在我的Web服务的构造函数中声明和实例化(在注释掉的行旁边:) //InitializeComponent();
  • 每30分钟启动一次火灾计时器。
  • 注意:因为我正在使用,System.Threading.Timer所以不必按照下面的msdn Tip#6运行保持活动代码。
  • 如果当前时间在我的数据库值(运行代码所需的时间)的30分钟以内,则运行代码。

问题:

  • 我想知道System.Threading.Timer使用上述计划在asp.net c#代码中使用的可靠性如何,如果它可以正确运行,那么可以说超过97%的时间?
  • 回收应用程序池和重新启动IIS服务器时,此计划是否有效?

似乎在Web服务中使用计时器存在以下问题:

  • 应用程序池回收
  • 线程快死了
  • 长期没有人上网
  • 时间记忆问题(最好使用Windows服务)

参考文献:

ASP.NET网站-在特定时间触发一些代码

网站上的计时器,每小时激活一次Web服务呼叫

http://forums.asp.net/t/1079158.aspx/1

http://msdn.microsoft.com/zh-cn/magazine/cc163854.aspx (请参阅提示6)

在技​​巧6中, “ System.Threading命名空间中的Timer类是一个非常有用的工具,但是在.NET Framework中它鲜为人知,至少对于Web开发人员而言是这样。创建后,Timer将以可配置的时间间隔从ThreadPool调用线程上的指定回调。这意味着您可以设置代码以在不向ASP.NET应用程序传入请求的情况下执行代码,这是后台处理的理想情况。您也可以在此后台过程中进行索引或发送电子邮件等工作。”

D S*_*ley 4

您使用了错误的工具来完成这项工作。Web 服务旨在按需使用,而服务和计划任务应用于定期活动。将相关代码从 Web 服务移至共享库,然后使用Timer可通过计划任务进行计划的 Windows 服务或控制台应用程序。