需求,程序每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日志
}
}
浙公网安备 33010602011771号