C# global.asax在空闲时间不工作
我正在mvc中处理global.asax,我面临的问题是,我已经设置了一个调度程序来启动global,它工作得很好,但是在启动global后我得到了数据,但是假设数据在接下来的20分钟内不可用,全局进程已经停止。现在,20分钟后,数据来自服务器,但全局已停止,因此我无法从全局获取数据。现在的问题是,我怎样才能将全局处理的时间增加到60分钟,或者怎样才能在数据到来时启动全局处理 这是我的密码C# global.asax在空闲时间不工作,c#,asp.net,.net,asp.net-mvc,global-asax,C#,Asp.net,.net,Asp.net Mvc,Global Asax,我正在mvc中处理global.asax,我面临的问题是,我已经设置了一个调度程序来启动global,它工作得很好,但是在启动global后我得到了数据,但是假设数据在接下来的20分钟内不可用,全局进程已经停止。现在,20分钟后,数据来自服务器,但全局已停止,因此我无法从全局获取数据。现在的问题是,我怎样才能将全局处理的时间增加到60分钟,或者怎样才能在数据到来时启动全局处理 这是我的密码 protected void Application_Start() { Ar
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 300 * 1000; //60*1000 means 1 min
//timer.Enabled = true;
timer.Elapsed +=new System.Timers.ElapsedEventHandler(Daily_Attendance_RFID);
timer.Start();
Application.Add("timer", timer);
}
static void Daily_Attendance_RFID(object sender, System.Timers.ElapsedEventArgs e)
{
//*** For RFID Attendance Function ***//
Daily_Attendance.Daily_Attendance_RFID();
}
短版: 您不应该在托管环境下设置计时器。这是一个坏习惯,句号 长版本: 原因很深,在于ASP.NET是如何开始的,以及“为什么”现在的情况。。但是我会尽我所能用我所掌握的一点知识来解释。。需要考虑的两点:
这绝对是安排任务的错误方法。看看Windows服务。实际上我是网络新手,所以你能告诉我什么是正确的方法吗?使用这个库:嘿,谢谢你的回答。我意识到,虽然我知道这是一个糟糕的做法,但我不知道为什么。您能否详细说明一下,在我们的w3wp进程中,由于计时器抓取锁并启动线程,到底会出现什么问题?我的意思是,在我们的ASP.NET应用程序中可能会有很多其他人做同样的事情,为什么只有计时器不好?没问题。回答我:如果IIS决定初始化多个AppDomain,会发生什么情况?这是否意味着您将同时运行两个计时器?如果有超过1个w3wp进程在运行,该怎么办?从应用程序的角度来看,所有这些问题的答案都不清楚。任务调度器也是如此,但它们仍然有一些机制来防止某些情况发生。谢谢,我得到了这个结论:很难控制计时器的生命周期,因为它将与您的web应用程序生命周期相关联,而您的web应用程序生命周期是由IIS以不可预知的方式控制的。