每晚11点自动生成Excel,并发送至邮箱

时间:2022-09-17 20:50:11

      我做了一个自动发送邮件的功能,使用Timer计时器来监测,想用间隔一段时间自动执行,利用global.asax后台执行,自动生成Excel,并发送至指定邮箱。发现发布至IIS后不自动执行,根本就没有进去Timer事件中去。

解决办法:发布到IIS后需要对所发布的网站进行浏览,这样才会启动Global.aspx,才会执行Timer监听事件。

    protected void Application_Start(Object sender, EventArgs e)
        {

    System.Timers.Timer myTimer = new System.Timers.Timer(60000 * 5);//设计时间间隔,如果10分钟执行一次就为60000*10
            myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
            myTimer.AutoReset = true;
            myTimer.Enabled = true;

}

  protected void Application_End(Object sender, EventArgs e)
        {
            //下面的代码是关键,可解决IIS应用程序池自动回收的问题  
            Thread.Sleep(1000);

            //这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start  
            string url = "http://www.baidu.com";
            HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
            Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流  
        }

  说明:IIS应用程序池会自动回收,回收后将不在执行Global.aspx中的事件,回收时间是1740分钟(我的是1740m),Application_End中如上可以解决IIS自动回收问题,通过Create url激发Application_Start 。但是这样仍然不能够解决IIS重启或者服务器重启的问题,发生这种情况时只要有人访问该网站就可以启动Application_Start 。