asp.net后台进程做定时任务

一个网站难免会有希望系统自动执行一些定时任务,asp.net提供这个功能,在应用程序开始的时候你做一个定时任务即可,只是IIS的应用程序池有自动回收机制,它会在工作1740分钟(默认)后自动回收,或者在系统空闲20分钟(默认)后自动回钟,此时定时任务会中止,因为事实上已经“application_end”了,这时候只要强制访问一下该网站的任何一个页面,甚至是空页面,其实也就是使应用程序激活,重新application_start,自然可以让任务重新开始

    string activeURL;
    void Application_Start(object sender, EventArgs e) 
    {
        //在应用程序启动时运行的代码
        CheckOrder.ckroder_start();//该方法比较复杂,封装出去了
        Uri uri = HttpContext.Current.Request.Url;
        activeURL = uri.Scheme + "://" + uri.Host + ":" + uri.Port + "/test.aspx";
        //上面演示了如何用编程方式获得当前应用程序的url,当前如果你的项目发布固定了,可以直接在application_end事件里面把url写死
    }
    
    void Application_End(object sender, EventArgs e) 
    {
        //在应用程序关闭时运行的代码
        log.write(LogType.Trace, "后台检查订单进程关闭");
        //这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
        System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(activeURL);
        System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();
        System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流

    }
有人在回复里提到有时候HttpContext.Current取不到值的问题,我也没能解决,毕竟它不是真实的请求
@翅膀的初衷
确实,但凡自动回收后被程序激活的,此时HttpContext.Currnet已经为空了。
所以:
1,有谁有好的办法可以用编程方式有效地取得真实域名么?我这个方式显然局限性很大。
2,我手动在iis应用程序池里点回收,每次却能正常激活,也就是说能取到HttpContext.Currnet,这个原因我也没想明白blog
分享两篇老外的做法:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值