需求,程序每20秒自动请求接口抓取数据
解决方式:
在程序根目录下的Global.asax.cs下编写
using System.Threading;
using System.Timers;
/// <summary> /// 启动应用程序 /// </summary> protected void Application_Start() { AreaRegistration.RegisterAllAreas(); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); //// 启动的时候清除全部缓存 ////定时器 userIBLL.SaveLog("应用程序启动", "Application_Start"); System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed += new ElapsedEventHandler(getMessages); //aTimer.AutoReset = true; aTimer.Interval = 20000; aTimer.Enabled = true; aTimer.Start(); userIBLL.SaveLog("应用程序启动", "2"); }
protected void Application_End(object sender, EventArgs e) { userIBLL.SaveLog("自动回收", "重新执行"); //下面的代码是关键,可解决IIS应用程序池自动回收的问题 Thread.Sleep(1000); HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(需要重新启动程序的地址); HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流 } protected void Application_Error(object sender, EventArgs e) { //重新启动应用程序 var lastError = Server.GetLastError(); } private void getMessages(object source, ElapsedEventArgs e) { try { 写入需要执行的程序 } catch (Exception ex) { //打log日志 } }