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();
。System.Threading.Timer
所以不必按照下面的msdn Tip#6运行保持活动代码。问题:
System.Threading.Timer
使用上述计划在asp.net c#代码中使用的可靠性如何,如果它可以正确运行,那么可以说超过97%的时间?似乎在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应用程序传入请求的情况下执行代码,这是后台处理的理想情况。您也可以在此后台过程中进行索引或发送电子邮件等工作。”
您使用了错误的工具来完成这项工作。Web 服务旨在按需使用,而服务和计划任务应用于定期活动。将相关代码从 Web 服务移至共享库,然后使用Timer
可通过计划任务进行计划的 Windows 服务或控制台应用程序。