Asp.Net 执行定时任务,我们要在Global.asax.cs中添加如下代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; namespace SurveyOnline { public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 System.Timers.Timer myTimer = new System.Timers.Timer(); //OnTimedEvent任务 myTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent); //间隔1秒 myTimer.Interval = 1000; myTimer.Enabled = true; } void Application_End(object sender, EventArgs e) { // 在应用程序关闭时运行的代码 } void Application_Error(object sender, EventArgs e) { // 在出现未处理的错误时运行的代码 } void Session_Start(object sender, EventArgs e) { // 在新会话启动时运行的代码 } void Session_End(object sender, EventArgs e) { // 在会话结束时运行的代码。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer // 或 SQLServer,则不会引发该事件。 } #region 定时任务 /// <summary> /// 定时任务处理 /// </summary> /// <param name="source"></param> /// <param name="e"></param> private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e) { //获得当前时间单位 int eyear = e.SignalTime.Year; int emonth = e.SignalTime.Month; int eday = e.SignalTime.Day; int ehour = e.SignalTime.Hour; int eminute = e.SignalTime.Minute; int esecond = e.SignalTime.Second; //获取未处理的定时任务列表 DataTable task = getTimeTag(); for (int i = 0; i < task.Rows.Count; i++) { //定时任务的时间 string date_time = task.Rows[i]["dateTime"].ToString(); //分解时间 SortedList<string, int> sl = getDateTimeMap(date_time); //任务时间单位 int year = sl["year"]; int month = sl["month"]; int day = sl["day"]; int hour = sl["hour"]; int minute = sl["minute"]; int second = sl["second"]; //处理 当前时间 = 定时任务时间 if (eyear == year && emonth == month && eday == day && ehour == hour && eminute == minute && esecond == second) { string connectionString = "server=127.0.0.1;database=We7_CMS;uid=sa;pwd=123456"; SqlConnection myConnection = new SqlConnection(connectionString); string sql = "update Article set state=1 where ID='" + task.Rows[i]["articleID"].ToString() + "'"; string id = task.Rows[i]["id"].ToString(); SqlCommand myCommand = new SqlCommand(sql, myConnection); myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); updateTaskState(connectionString, id); } } } /// <summary> /// 修改定时任务表 任务状态 state /// </summary> /// <param name="connectionString">连接字符串</param> /// <param name="id">任务ID</param> private static void updateTaskState(string connectionString, string id) { SqlConnection myConnection = new SqlConnection(connectionString); string sql = "update TimerTask set state=1 where id=" + id; SqlCommand myCommand = new SqlCommand(sql, myConnection); myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); } /// <summary> /// 分解时间日期, 年 月 日 时 分 秒 得到每个单位的值 /// </summary> /// <param name="date_time">字符串日期 例如:2013-06-10 11:36:12</param> /// <returns>类似Map的键值集合</returns> private static SortedList<string, int> getDateTimeMap(string date_time) { string[] dts = date_time.Split(' '); string date = dts[0]; string time = dts[1]; string[] ymd = date.Split('-'); int year = Convert.ToInt32(ymd[0]); int month = Convert.ToInt32(ymd[1]); int day = Convert.ToInt32(ymd[2]); string[] hms = time.Split(':'); int hour = Convert.ToInt32(hms[0]); int minute = Convert.ToInt32(hms[1]); int second = Convert.ToInt32(hms[2]); SortedList<string, int> sl = new SortedList<string, int>(); sl.Add("year", year); sl.Add("month", month); sl.Add("day", day); sl.Add("hour", hour); sl.Add("minute", minute); sl.Add("second", second); return sl; } /// <summary> /// 获得未处理的定时任务 state=0 未处理 /// </summary> /// <returns>未处理的定时任务列表</returns> private static DataTable getTimeTag() { StringBuilder strSql = new StringBuilder(); strSql.Append("select * "); strSql.Append(" FROM TimerTasK where state=0 "); return SqlHelper.ExecuteDataTable(CommandType.Text, strSql.ToString(), null); } #endregion } }
相关推荐
综上所述,通过ASP.NET结合Quartz.NET和TopShelf,我们可以构建一个强大且易于维护的定时任务调度系统,满足各种时间驱动业务的需求。无论是简单的周期性任务,还是复杂的定时策略,都能通过这个组合轻松实现。在...
ASP.NET定时任务是Web开发中常见的一种功能,用于在特定时间间隔执行某些操作,例如数据同步、清理缓存、发送通知等。在这个场景下,我们讨论的是如何在ASP.NET环境中设置一个定时器,使得页面加载或IIS启动后,该...
Quartz.NET是一款强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。这个"Quartz.net-定时任务 Demo"示例将展示如何利用Quartz.NET来安排代码在指定时间后执行,比如几十分钟后的场景。 Quartz.NET的...
当我们需要在网站上实现定时执行的任务时,例如数据备份、清理日志或者执行统计分析,可以利用C#和ASP.NET的特性来创建一个定时执行的程序。在给定的标题和描述中,提及的是通过`global.asax`文件来实现这个功能。 ...
Windows服务是在后台独立运行的程序,不受用户交互影响,非常适合执行定时任务。开发者可以创建一个C#的Windows服务,利用`System.Timers.Timer`类来设置定时任务。在服务中,你可以定义一个方法来执行需要定时运行...
在Asp.net(C#)开发中,创建Windows服务并实现定时执行是一项常见的需求,这主要应用于后台自动化任务,如数据同步、日志清理、定时发送邮件等。下面将详细讲解如何进行这一操作。 首先,我们需要了解Windows服务的...
ASP.NET定时任务是一种在Web应用程序中执行预定任务的技术,它允许开发者在特定时间或间隔执行某些操作,如数据同步、日志清理、发送邮件等。ASP.NET提供了多种方式来实现定时任务,包括System.Threading.Timer、...
2. **添加Web服务或页面**:在新项目中,添加一个新的ASP.NET Web服务(.asmx)或Web表单(.aspx),这将是定时任务的执行载体。 3. **编写定时逻辑**:在服务或页面的代码后面,创建一个方法,该方法包含定时任务...
ASP.NET定时关机的实现通常涉及到计划任务或后台工作线程。开发者可以利用.NET Framework提供的System.Timers.Timer类或者System.Threading.Timer类来创建定时器,设置特定间隔后触发关闭服务器的操作。源代码可能...
"ASP.NET 编程知识:.NET Core 基于 Hangfire+Mysql 持久化实现定时任务配置方法" 摘要:本文将详细介绍如何使用 Hangfire 和 Mysql 实现基于 .NET Core 的定时任务配置方法,包括 Hangfire 的安装配置、Appsetting...
通过上述方法,可以在无状态的Web环境中,利用ASP.NET Cache机制有效地实现类似于Windows Service的定时任务功能。虽然这种方法可能不如直接使用Windows Service那样强大和灵活,但对于受限于Web环境的开发者而言,...
这种方式适用于需要在ASP.NET应用程序中执行轻量级定时任务的场景。不过需要注意的是,这种方法依赖于应用程序保持运行状态,一旦应用程序停止或重启,定时任务也会随之停止。对于更复杂的需求,建议考虑使用更专业...
### ASP.NET中利用多线程执行长时间任务并显示进度 #### 概述 在Web开发中,特别是ASP.NET应用程序中,经常会遇到需要处理耗时任务的情况。这些任务可能包括数据库操作、文件处理或其他复杂的计算任务。为了提升...
一旦定时器被启用,它将在设定的时间间隔后触发`MTimedEvent`事件处理器,从而执行定时任务。 ### 定时邮件发送实现 `MTimedEvent`方法是定时器触发后执行的实际逻辑。在这个方法中,首先调用`StartWork()`方法,...
Quartz.NET是一款强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它支持复杂的调度逻辑,可以灵活地配置任务执行的时间间隔和模式。在本案例中,"Quartz.NET定时任务例子源代码(C#)" 提供了一个使用...
`Program.cs` 是ASP.NET Core应用的入口点,通常在这里启用Furion框架并配置定时任务服务。通过调用`UseFurion()`扩展方法,我们可以启动Furion并使用其特性,而`AddJobs()`方法则用于注册定时任务服务。此外,还...
在复杂的业务应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件,定期处理用户状态信息,支付系统中定期同步异常账单等等,我们称之...
本文将介绍两种方法:使用AspNet Core自带的HostService和使用Quartz.Net组件,并重点讲解如何使用Quartz.Net来实现复杂且灵活的定时任务。 首先,让我们了解AspNet Core自带的HostService。HostService是一种轻量...
核心在于使用`System.Timers.Timer`设置定时任务,并在预定的时间点执行邮件发送操作。同时,通过`***.Mail`命名空间下的类封装邮件发送逻辑,实现邮件的快速构建和发送。而日志记录则是保证服务稳定运行的重要手段...