灌木大叔

每一个不曾起舞的日子都是对以往生命的辜负!!

  :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::
  89 随笔 :: 114 文章 :: 4 评论 :: 22万 阅读

在Global.asax设置代码:
void Application_Start(object sender, EventArgs e)

{

    //添加定时器 在应用程序启动时运行的代码 这里设置34个小时间隔 122400000 300000

    System.Timers.Timer myTimer = new System.Timers.Timer(122400000);//修改时间间隔

    //关联事件

    myTimer.Elapsed += new System.Timers.ElapsedEventHandler(AutoExec);

    myTimer.AutoReset = true;

    myTimer.Enabled = true;

}
private void AutoExec(object sender,System.Timers.ElapsedEventArgs e)

{

string filename = (DateTime.Now.ToString() + DateTime.Now.Millisecond.ToString()).Replace("/", "").Replace(":", "").Replace(" ", "") + ".txt";
// string file = "~/img/" + filename;
string file = @"C:\Users\Administrator\Documents\Visual Studio 2013\WebSites\testasax\img" + filename;
string content = "写入内容!";
if (System.IO.File.Exists(file) == true)
{
// MessageBox.Show("存在此文件!");
}
else
{
System.IO.FileStream myFs = new System.IO.FileStream(file, System.IO.FileMode.Create);
System.IO.StreamWriter mySw = new System.IO.StreamWriter(myFs);
mySw.Write(content);
mySw.Close();
myFs.Close();

}

}

void Application_End(object sender, EventArgs e) 

{

    //  在应用程序关闭时运行的代码,解决iis自动回收
    //如果出错,删除下面代码

    //下面的代码是关键,可解决IIS应用程序池自动回收的问题

    System.Threading.Thread.Sleep(1000);

    这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start

    string url = "http://www.xxxxx.com";

    string url = "http://localhost:82/111.aspx";

    System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);

    System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();

    System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
    //在此添加其它代码

}

也可以设置iis线程池,解决自动回收。
夜间或者网站在经过无访问阶段后,后台调度的线程和计算任务都停止了,如果你抓取了Application_End事件,会发现这个事件居然被调用了。

那一定是IIS的应用程序池回收的机制在作怪了。因为IIS的默认设置里面,如果一个站点所处的应用程序池超过一段时间没有被访问或者请求,IIS就会自动回收这个程序池,并且把进程杀掉。那Quartz的定时任务也自动停止了。

但是我们可以通过设置应用程序池参数使其不会被简单的自动回收(有些情况无法避免,比如热部署的站点,错误数量超限等等)

在IIS中找到这个站点所用的程序池,点击“高级设置...”

在打开的列表中更改以下设置:

回收——固定时间间隔(分钟) 改为 0

    ——虚拟/专用内存限制(KB) 改为 0

进程模型——闲置超时(分钟) 改为 0

这样子,一般情况下程序池就不会被自动回收了,后台Quartz 的定时任务就会正常工作

posted on   灌木大叔  阅读(1682)  评论(0编辑  收藏  举报
(评论功能已被禁用)
点击右上角即可分享
微信分享提示