您的位置:首页 > 其它

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

2015-05-07 11:02 330 查看
     
我做了一个自动发送邮件的功能,使用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 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: