ASPNET内部机制实现计划任务代码在中要不使用其他插件的情况下只能使用定时器来检查 并执行任务
以下讲解步骤
在Globalasax 文件中作如下修改
void Application_Start(object sender EventArgs e)
{
// 在应用程序启动时运行的代码
//定义定时器
//表示秒的意思
SystemTimersTimer myTimer = new SystemTimersTimer()
//TaskActionSetContent 表示要调用的方法
myTimerElapsed += new SystemTimersElapsedEventHandler(TaskActionSetContent)
myTimerEnabled = true;
myTimerAutoReset = true;
}
Application_Start 只有在访问一次之后才会触发
void Session_End(object sender EventArgs e)
{
//下面的代码是关键可解决IIS应用程序池自动回收的问题
SystemThreadingThreadSleep()
//触发事件 写入提示信息
TaskActionSetContent()
//这里设置你的web地址可以随便指向你的任意一个aspx页面甚至不存在的页面目的是要激发Application_Start
//使用您自己的URL
string url = ;
SystemNetHttpWebRequest myHttpWebRequest = (SystemNetHttpWebRequest)SystemNetWebRequestCreate(url)
SystemNetHttpWebResponse myHttpWebResponse = (SystemNetHttpWebResponse)myHttpWebRequestGetResponse()
SystemIOStream receiveStream = myHttpWebResponseGetResponseStream()//得到回写的字节流
// 在会话结束时运行的代码
// 注意 只有在 nfig 文件中的 sessionstate 模式设置为 InProc 时才会引发 Session_End 事件
// 如果会话模式设置为 StateServer
// 或 SQLServer则不会引发该事件
}
Session_End 中的方法主要是解决IIS应用程序池自动回收的问题
添加计划任务类 TaskAction
using System;
using SystemCollectionsGeneric;
using SystemLinq;
using SystemWeb;
using SystemTimers;
/// <summary>
///Action 的摘要说明
/// </summary>
public static class TaskAction
{
private static string content = ;
/// <summary>
/// 输出信息存储的地方
/// </summary>
public static string Content
{
get { return ntent; }
set { ntent += <div> + value+</div>; }
}
/// <summary>
/// 定时器委托任务 调用的方法
/// </summary>
/// <param name=source></param>
/// <param name=e></param>
public static void SetContent(object source ElapsedEventArgs e)
{
Content = DateTimeNowToString(yyyyMMdd HH:mm:ss)
}
/// <summary>
/// 应用池回收的时候调用的方法
/// </summary>
public static void SetContent()
{
Content = END: + DateTimeNowToString(yyyyMMdd HH:mm:ss)
}
}
执行结果输出[Defaultaspx] (此步仅仅为了观看结果才写的页面)
在Defaultaspx页面 添加
<div>
<%=TaskActionContent %>
</div>
结果输出