苏飞论坛

标题: asp.net定时执行方法在Global全局应用程序中实现 [打印本页]

作者: 站长苏飞    时间: 2014-2-20 10:07
标题: asp.net定时执行方法在Global全局应用程序中实现
asp.net定时执行方法在Global全局应用程序中实现


我想做的就是这样一个功能,
实现一个定时执行一个方法的功能,
其实就是定时执行一时固定的操作
这个我要借助Global文件来实现,
大家看看我的实现方法吧。
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Timers;
using System.Net;
using System.IO;
using System.Threading;

namespace Request
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            //定时器  
            System.Timers.Timer comTimer = new System.Timers.Timer(10000);
            comTimer.Elapsed += new ElapsedEventHandler(comTimer_Elapsed);
            comTimer.Enabled = true;
            comTimer.AutoReset = true;
        }
        
        void comTimer_Elapsed(object source, ElapsedEventArgs e)
        {
            try
            {
                //执行内容
            }
            catch { }
        }

        protected void Application_End(object sender, EventArgs e)
        {
            try
            {
                //下面的代码是关键,可解决IIS应用程序池自动回收的问题
                Thread.Sleep(1000);
                //这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start  
                string url = "http://www.sufeinet.com/Login.aspx ";
                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
                Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流  
            }
            catch { }

        }
        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {

        }


    }
}

这样就行了,这样每过10000毫秒会执行一次void comTimer_Elapsed(object source, ElapsedEventArgs e)这个方法。
为了解决IIS回收的后不执行的问题我还增加了这样一个功能大家请看
[C#] 纯文本查看 复制代码
protected void Application_End(object sender, EventArgs e)
{
try
{
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
string url = "http://www.sufeinet.com/Login.aspx ";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
}
catch { }

}

里面有注释大家自己看看吧,
有问题请回复我。

作者: 站长苏飞    时间: 2014-2-20 10:37
关于时间 的计算如下方法所示
[C#] 纯文本查看 复制代码
 
                        double h = (DateTime.Now - rl.pageListener[k].CreateTime).TotalHours;
                                if (h > 4)
                                {

                                };



作者: 流云飞星    时间: 2014-4-21 08:47
受教了,学习中……
作者: love'点点    时间: 2014-9-25 11:03
有时候编译发布后Global.asax不执行怎么办?直接把未编译的 Global.asax和Global.asax.cs 复制到已发布的网站根目录即可 ~~~
作者: ching126    时间: 2014-10-8 12:26
感谢您的无私奉献,真是帮了我的大忙了
作者: 网站网页    时间: 2014-12-19 14:15
如果像那种贷款网站,每天都要更新计算利息,这要怎么实现呢?@站长苏飞  
作者: 站长苏飞    时间: 2014-12-19 14:17
网站网页 发表于 2014-12-19 14:15
如果像那种贷款网站,每天都要更新计算利息,这要怎么实现呢?@站长苏飞

这个没什么吧,每天获取到新的指数进行修改就行了,只需要将所的调取的部分配置出来应该就行了
作者: 网站网页    时间: 2014-12-19 14:31
站长苏飞 发表于 2014-12-19 14:17
这个没什么吧,每天获取到新的指数进行修改就行了,只需要将所的调取的部分配置出来应该就行了

如果服务器  重新启动了  有影响吗?




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4