欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET定时任务执行管理器开源组件–FluentScheduler,可以在web应用程序里面使用

程序员文章站 2022-08-31 19:50:07
public class MvcApplication : System.Web.HttpApplication { ///
 public class MvcApplication : System.Web.HttpApplication
    {
        /// <summary>
        /// 数据上传服务地址,比如 https://localhost:89/DataToJt_WS.asmx
        /// </summary>
        public static readonly string severApiUploadAddress = System.Configuration.ConfigurationManager.AppSettings["SeverApiUploadAddress"];

        //启动服务
        protected void Application_Start()
        {
            RegisterGlobalFilters(GlobalFilters.Filters);//注册过滤器
            RegisterRoutes(RouteTable.Routes);

            //创建任务
            try
            {                
                string timeSet = System.Configuration.ConfigurationManager.AppSettings["RunTime"];//获取配置文件任务执行设置时间
                DateTime setRunTime = Convert.ToDateTime(timeSet);
                Registry task = new Registry();
                task.Schedule(() => Run_ServerUpload()).ToRunEvery(1).Days().At(setRunTime.Hour, setRunTime.Minute);//任务每天定时执行
                FluentScheduler.JobManager.Initialize(task);
                //启动服务日志
                LogManager.AddLog("700", "启动服务成功", "UplodLog");
                LogManager.AddLine("UplodLog", 1);
            }
            catch (Exception)
            {
                LogManager.AddLog("700", "启动服务失败", "UplodLog");
                LogManager.AddLine("UplodLog", 1);
            }
        }
        /// <summary>
        /// 自动执行上传方法
        /// </summary>
        private void Run_ServerUpload()
        {
            string timeSet = System.Configuration.ConfigurationManager.AppSettings["RunTime"];
            LogManager.AddLog("300", "设置的执行时间" + timeSet, "UplodLog");
            LogManager.AddLog("300", "======开始自动执行上传方法", "UplodLog");
            WebApplicationBAOJI.Controllers.HomeController hc = new Controllers.HomeController();
            string dateSeach = DB.GetLiJiDate().ToString("yyyy-MM-dd");

            hc.Send_Laboratory_Data(dateSeach);
            hc.Send_Instorage_Check(dateSeach);
            hc.Send_DumpStorage();
            hc.Send_Measure_Train(dateSeach);
            hc.Send_OrgDumpInfo(dateSeach);
            hc.Send_Furnace_Rqteamdata(dateSeach);
            hc.Send_DumpOperationOut(dateSeach);
            hc.Send_DumpOperationIn(dateSeach);
            hc.Send_Coalyard_DevicesLog(dateSeach);
            hc.Send_DumpInfo();
            hc.Send_Clrzc(dateSeach);

            LogManager.AddLine("UplodLog", 1);
            LogManager.AddLog("300", "自动执行上传完成", "UplodLog");
        }

        protected void Application_End(object sender, EventArgs e)
        {
            try
            {
                LogManager.AddLog("4", "进程即将被IIS回收", "Application_End");
                LogManager.AddLog("4", "重新访问一个页面,以唤醒服务", "Application_End");
                string strUrl = System.Configuration.ConfigurationManager.AppSettings["SelfAddress"];//本程序部署地址
                System.Net.HttpWebRequest httpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(strUrl);
                System.Net.HttpWebResponse httpWebResponse = (System.Net.HttpWebResponse)httpWebRequest.GetResponse();
                System.IO.Stream stream = httpWebResponse.GetResponseStream();//得到回写的字节流
                httpWebResponse.Close();
            }
            catch (Exception ex)
            {
                LogManager.AddLog("4", "唤醒服务异常:" + ex.Message, "Application_End");
            }
        }

该服务会被IIS回收,所以要在Application_End结束程序时,要自己访问自己,保证不会被iis回收掉,这样才能保证24小时不间断服务,才不会中断,切记