zoukankan      html  css  js  c++  java
  • C# 因IIS回收导致定时器失效的解决方案

    1. 首先不要设置iis自动回收,一般设置凌晨1-2点左右回收一次,当凌晨iis回收应用程序池的时候,会调用Application_End,执行里面的代码,  
    2. 重新启动网站,建议定时器的代码放在Session_Start里面,因为  
    3. Application_Start只有再第一个用户访问网站的时候才会触发该方法,通常会在该方法里定义一些系统变量,如聊天室的在线总人数统计,  
    4. 历史访问人数统计的初始化等等均可在这里定义.所以第一次访问的时候会先进入Application_Start,  
    5. 然后再进入Session_Start。但是以后每次访问的时候进入的是Session_Start  
    6. 第一个访问网站的用户会触发该方法.     
    7.   
    8. Application_Start()  
    9.     {  
    10.       
    11.   
    12.     }  
    13. //每个用户访问网站的第一个页面时触发;  
    14.     void Session_Start(object sender, EventArgs e)  
    15.     {  
    16.       LogHelper.WriteInfoLog("触发Session_Start事件,准备执行定时任务:" + DateTime.Now);  
    17.   
    18.       #region 定时任务  
    19.       System.Threading.Thread myTimer = new System.Threading.Thread(new System.Threading.ThreadStart(Timer_Write));  
    20.       myTimer.Start();  
    21.       #endregion  
    22.   
    23.     }  
    24. //网站关闭,或重启时,会触发该方法.  
    25.   
    26.     void Application_End(object sender, EventArgs e)  
    27.     {  
    28.       //下面的代码是关键,可解决IIS应用程序池自动回收的问题  
    29.       System.Threading.Thread.Sleep(1000);  
    30.       //触发事件, 写入提示信息  
    31.       LogHelper.WriteInfoLog("触发Application_End事件,正在重新启动网站:" + DateTime.Now);  
    32.       //这里设置你的web地址,可以随便指向你的任意一个页面甚至不存在的页面,目的是要激发Session_Start  
    33.   
    34.       //使用您自己的URL  
    35.       string url = "你的网址";  
    36.       System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);  
    37.       System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();  
    38.       System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流  
    39.   
    40.     }  


    Quartz定时任务和IIS程序池闲置超时时间冲突解决方案

    一、问题描述

      Bs项目中用Quartz功能执行一个定时任务(每隔5分钟执行一个Job),正常情况,Quartz定时任务会5分钟执行一次,但IIS程序池闲置

    超时默认为20分钟,造成的结果是:定时任务只执行了4次。那么怎么解决程序池闲置超时引进Quartz定时任务停止执行问题?


    二、解决方案
    方案一:设置IIS默认闲置超时为1740(跟程序池默认回收时间1740)
    方案二:IIS服务器规定的时间内,定时向服务器取一次数据

    三、方案介绍
    1)方案一:设置IIS默认闲置超时为1740(跟程序池默认回收时间1740)
      通过设置程序池--高级设置--模型设计--闲置超时,设置为1740(29小时)

    原理:改变IIS程序池闲置超时时间,设置为1740(29分钟),保证不会出现闲置超时而执行的资源清理
    前提:需保证这个网站一天有一个访问量就不会触发到iis闲置超时而执行的资源清理


    2)方案二:IIS服务器规定的时间内,定时向服务器取一次数据

      那就是保持有一台机器开着,在这个Application下写一个文件,用JavaScript每隔几分钟(小于程序池默认闲置超时时间)就自我刷新一下,

    浏览器一直开着,这样就强制让它处于被访问的状态。但这个方法并不稳定

    原理:强制让它处于被访问的状态,不会出现闲置导致问题
    前提:保证浏览器开着,js设置定时方法设置为小于闲置超时时间

    PS:

    解决方案介绍来自这个网址:http://blog.csdn.net/zhangquanok/article/details/16807603

    平时多记记,到用时才能看看,记录你的进步,分享你的成果
  • 相关阅读:
    atitit.nfc 身份证 银行卡 芯片卡 解决方案 attilax总结
    atitit.php 流行框架 前三甲为:Laravel、Phalcon、Symfony2 attilax 总结
    Atitit.执行cmd 命令行 php
    Atitit. 图像处理jpg图片的压缩 清理垃圾图片 java版本
    atitit。企业组织与软件工程的策略 战略 趋势 原则 attilax 大总结
    atitit. 管理哲学 大毁灭 如何防止企业的自我毁灭
    Atitit.java的浏览器插件技术 Applet japplet attilax总结
    Atitit.jquery 版本新特性attilax总结
    Atitit. 软件开发中的管理哲学一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向
    (转)获取手机的IMEI号
  • 原文地址:https://www.cnblogs.com/Alex80/p/9062556.html
Copyright © 2011-2022 走看看