背景 我在使用C#编写的Windows Server 2008上运行.NET 4.0 Web服务。 我想在每天运行一次代码的asp.net Web服务中运行一个计时器。我听说过这方面的一些限制(见下文),但我问我计划的是否可以解决一些限制并将代码保留在Web服务中,因为它不是关键任务代码。然而,崩溃是不可接受的。注意:我不是也不能使用WCF。
计划:
System.Threading.Timer
我的网络服务(在注释掉的行旁边:
//InitializeComponent();
)。System.Threading.Timer
我不应该跑
保持活动代码根据下面的msdn提示#6。 问题:
System.Threading.Timer
是多么可靠,如果它能正确运行,那么超过97%的时间会这样说吗?在Web服务中使用计时器似乎存在以下问题:
参考文献:
ASP.NET Site - Firing some code at a specific time
Timer on Website to activate Web Service calls every hour
http://forums.asp.net/t/1079158.aspx/1
http://msdn.microsoft.com/en-us/magazine/cc163854.aspx(见提示#6)
来自提示#6 “在System.Threading命名空间中找到的Timer类是.NET Framework中一个非常有用但不太知名的类,至少对Web开发人员来说是这样。一旦创建,Timer将以可配置的间隔从ThreadPool调用线程上的指定回调。这意味着您可以设置代码以在没有对ASP.NET应用程序的传入请求的情况下执行,这是后台处理的理想情况。您也可以在此后台进程中执行索引或发送电子邮件等工作。“
答案 0 :(得分:4)
你正在使用错误的工具来完成工作。 Web服务用于按需使用,而服务和计划任务应用于定期活动。将相关代码从Web服务移出到共享库中,然后创建带有Timer
的Windows服务或可通过计划任务安排的控制台应用程序。
答案 1 :(得分:1)
如果由于某种原因,你必须这样做。请务必阅读IRegisteredObject 以及此subject
上的Haacked的帖子答案 2 :(得分:0)
您可以在Global.asax.cs
事件中的Application_Start
文件中设置计时器对象,而不是在Web服务中。