在ASP.NET中模拟Windows服务运行计划任务
导言
ASP.NET如何在不依赖Windows服务的情况下运行计划任务呢?我们常常需要执行一些维护任务或计划任务,例如在网站上向用户发送提醒邮件等。ASP.NET并不能持续运行一段程序或计划任务,我们可以利用Windows服务来运行计划任务或时钟守护工作。但是,在虚拟主机上我们并不能部署Windows服务,或许你可以购买专用主机来实现这个功能,不过这对普通用户来说太奢侈了。计划任务能帮助我们向用户发送提醒邮件,向管理员发送维护报告,执行清理操作等,是一个非常方便的功能,我会向大家展示一个微妙的方法来执行计划任务,只使用ASP.NET而不需要依赖Windows服务。该解决方案能运行在任何虚拟主机上,无需购买专门的服务器。
如何运作
首先我们需要能在ASP.NET中持续运行并执行回调的对象。IIS服务器是持续运行的,我们需要它频繁回调,来查看列队中是否有任务需要执行。服务器在一下情况执行回调。
• 一个网页被访问时
• Application启动时
• Application停止时
• Session启动、结束或超时时
• Cache项目超时时
网页被访问是随机的,如果没有人访问网页,等待执行的工作可能永远不被执行。此外,访问请求的时间很短,而且需要尽快完成。如果在此时执行计划任务,被访问的页面需要很长的时间才能显示出来,这会导致不良的用户体验。显然,这个方案并不太好。