ASP教程 PHP教程 JSP教程 CGI教程 XML教程
  • ASP.NET教程
  • JAVA教程
    当前位置:教程 > 程序设计 > ASP.NET教程 > 正文

    ASP.NET定时任务与IIS应用程序回收

    编辑:教程网 来源:网络 时间:2013年08月16日 14:27

    研究动机 最常见是「电子报」的定时寄送,在ASP.NET应用里,我们通常会建立一个Windows Service来负责定时的电子报寄送服务,但每次布署网站时得需要管理员权限来布署这服务。其实,ASP.NET应用程序可以透过Global.aspx中的定义来执行定时计划性任务,实作方式很简单(加入一个Timer即可),但它会遇到iis的应用程序定时回收机制(预设是每29个小时),即会停止运作。解决的方式可详看这篇文章: asp.net计划任务-解决应用池回收问题。整个技术的重点在于掌握Timer失去功效的时机,为此我作了一番测试与验证,才敢正式使用。

    Timer执行时机 原文没把timer对象的宣告等级调为全域,随时有可能被回收:

    \ 原本要用EventLog写入事件记录,但ASP.NET在安全等级不允许,因此我使用一个I/O Log来记录timer触发的时机点。 www.it165.net \

    IIS回收时机 IIS管理员中,你可以随时停止一个虚拟子网站的运行:

    \ 然而,它只是阻止Web Client联机,并不会影响该Web程序的内应用程序,只有透过Browse该网站,才会启动Application_Start()函式。每个ASP.NET应用程序都会对映到其「应用程序池」,它预设29小时会回收所衍生的程序(取消定时回收并不是一个好的主意): \ 这个回收程序执行时,就会触发Application_End()函式,并停止所有运作,等到有人再Browse该网站任一页,才会再启动Application_Start()函式。 因此我们若要维持timer不中断,就必须在End函式中,再去触发browse网站任一页。 \ 当你要手动执行回收时,在「应用程序集区」按右键: \

    本文结论 这篇文章探讨IIS触发Web应用程序的Application_Start()与End()时机,唯有充份了解,才能掌握Timer计划性任务的确切执行。

    2008-12-02 PM 02:11:01 或许是在外头Hosting主机的应用集区定时回收或终止,以上的网页定时机制并不稳定,有时能定时执行,有时却莫名终止了,而本机测试时倒都是正常的。所以,有一好没两好,世事如此无常 :)


  • 原文来自 教程网 转载请注明:http://www.websmill.com/chengxu/aspnet/32330.html

  • 上一篇:Asp.Net配置文件修改(二)
  • 下一篇:Linq 文件查询