`
dawuafang
  • 浏览: 1192098 次
文章分类
社区版块
存档分类
最新评论

asp.net后台自动任务-解决应用池回收问题(转)

 
阅读更多

asp.net后台自动任务-解决应用池回收问题(转)

在复杂的业务应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件,定期处理用户状态信息,支付系统中定期同步异常账单等等,我们称之为计划任务。实现计划任务的方法也有很多,可以采用SQLAgent执行存储过程,采用Windows任务调度程序来实现,也可以使用Windows服务来完成我们的计划任务,这些方法都是不错的解决方案。但是,以上这些都需要有服务器的权限才能进行,而对于虚拟主机客户使用的Web应用程序来说,这些方法实现起来并不是很简单的,主机服务提供商或者不能直接提供这样的服务,或者需要你支付许多额外的费用。 看过一些这方面的文章,发现有一个共同的缺点:IIS运行到一定时期,计划任务就停止了。查找原因发现是IIS的应用程序池定期回收导致计划任务停止。本文的这个方法可以解决应用程序池回收问题。
请看代码:复制内容到剪贴板代码:Global.asax.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Timers;
using System.Net;
using System.IO;
using System.Text;
using System.Threading;
//手机主题 http://www.qumiao.com
//Email:haolinks#163.com
//Author:漫步甜蜜
namespace qumiao.com
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
//定义定时器
System.Timers.Timer myTimer = new System.Timers.Timer(5000);
myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled = true;
myTimer.AutoReset = true;
}
void myTimer_Elapsed(object source, ElapsedEventArgs e)
{
try
{
Log.SaveNote(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":AutoTask is Working!");
YourTask();
}
catch (Exception ee)
{
Log.SaveException(ee);
}
}
void YourTask()
{
//在这里写你需要执行的任务
}
protected void Application_End(object sender, EventArgs e)
{
Log.SaveNote(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":Application End!");
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
//string url = "http://www.qumiao.com";手机主题
string url = "http://localhost:82/111.aspx";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流

}
}
}
原理:Global.asax 可以是asp.net中应用程序或会话事件处理程序,我们用到了Application_Start(应用程序开始事件)和Application_End(应用程序结束事件)。当应用程序开始时,启动一个定时器,用来定时执行任务YourTask()方法,这个方法里面可以写上需要调用的逻辑代码,可以是单线程和多线程。当应用程序结束时,如IIS的应用程序池回收,让asp.net去访问当前的这个web地址,本地测试的时候写本地地址,如http://localhost:82/111.aspx,到正式生产环境,可以改成你的web地址,如手机主题http://www.qumiao.com等。这里需要访问一个aspx页面,这样就可以重新激活应用程序。Log类是一个记录日志的一个类,下面是测试时生成的日志信息:
================================================================
2008-10-30 17:46:10:AutoTask is Working!
2008-10-30 17:46:15:AutoTask is Working!
2008-10-30 17:46:20:AutoTask is Working!
2008-10-30 17:46:23:Application End!
2008-10-30 17:46:29:AutoTask is Working!
2008-10-30 17:46:34:AutoTask is Working!
从日志中发现,当手动回收IIS的应用程序池之后,计划任务还在执行,说明我们的目的达到了。
如果将Application_End中的代码注释掉,会发现Application End之后,计划任务停止工作了,如下:
================================================================
2008-10-30 18:01:34:AutoTask is Working!
2008-10-30 18:01:39:AutoTask is Working!
2008-10-30 18:01:44:AutoTask is Working!
2008-10-30 18:01:46:Application End!

局限性:可以解决应用程序池自动或者手动回收,但是无法解决IIS重启或者web服务器重启的问题,当然这种情况出现的时候不多,而且如果有人访问你的网站的时候,又会自动激活计划任务了。
分享到:
评论

相关推荐

    ASP.NET第一步—基于C#和ASP.NET 2.0---光盘内容

    ASP.NET是微软公司开发的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了丰富的功能和工具,简化了Web应用的开发流程。本资源"ASP.NET第一步—基于C#和ASP.NET 2.0---光盘内容"显然是一个学习...

    asp.net定时任务(定时器)

    当应用程序部署到IIS时,可以设置应用程序池的回收策略,避免定时任务因应用程序回收而中断。同时,确保IIS配置允许长时间运行的请求。 8. **调试与日志**: 对于定时任务,添加适当的日志记录是关键,可以帮助...

    ASP.net从入门到实践

    - **ASP.NET编译器**:自动编译ASP.NET代码,提高应用程序性能。 - **ASP.NET调试机制**:帮助开发者定位和修复代码中的错误。 通过学习和实践ASP.NET,开发者不仅可以创建静态展示型网站,还能构建复杂的业务...

    c# .NET 毕业设计资源 -基于ASP办公自动化系统论文+源代码+开题报告+文献综述+外文翻译)

    在C# .NET环境下开发此类系统,开发者可以利用ASP.NET的Web Forms或MVC架构,结合Entity Framework进行数据访问,构建出高效、灵活的后台逻辑。 开题报告是毕业设计的第一步,它涵盖了研究背景、目的、意义、技术...

    关于asp.net的总结案例

    ASP.NET页面生命周期管理、事件驱动模型以及自动垃圾回收机制是其核心特性。 2. **页面生命周期** ASP.NET页面经历一系列的阶段,包括初始化、加载、验证、呈现和卸载。开发者可以在这个过程中插入代码来处理特定...

    ASP.NET旅游网站

    C#是ASP.NET框架的主要编程语言,具有现代编程语言的特性,如面向对象、类型安全和垃圾回收等,为开发高效、稳定的Web应用提供了保障。 在【166ASP.NET辽宁旅游网站】这个项目中,我们可以推测其主要包含了以下几个...

    ASP.NET 基础教程-C#案例版

    ASP.NET是微软公司开发的一种用于构建Web应用程序的框架,它基于.NET Framework,为开发者提供了丰富的功能和工具,简化了Web应用的开发流程。本教程主要针对ASP.NET的基础知识,结合C#编程语言,通过实际案例来帮助...

    asp.net网络书城,网上书城

    ASP.NET的核心优势在于其强大的页面生命周期管理、自动状态管理、事件驱动模型以及丰富的控件库。 在ASP.NET中,Web Forms是一个重要组成部分,它允许开发者通过拖放控件和编写代码的方式创建交互式的网页。此外,...

    Asp.net会员管理系统

    Asp.net的特性包括自动垃圾回收、页面生命周期管理、视图状态、缓存机制等,这些都使得开发会员管理系统变得更加便捷。 三、会员管理模块 1. 管理员管理:管理员是系统的核心角色,负责系统的整体运行。Asp.net...

    asp.net网上书店

    ASP.NET是微软公司推出的Web应用程序开发框架,它集成了强大的开发工具和丰富的功能,使得开发者可以高效地构建动态、数据驱动的Web应用。在本项目中,ASP.NET用于创建服务器端的页面逻辑和业务处理,提供了灵活的...

    asp.net习题答案

    - **ASP.NET Web 应用程序**:使用ASP.NET技术开发的Web应用程序。 - **类库**:一组可重用的类集合。 - **Web 用户控件**:用户自定义的Web控件。 - **控制台应用程序**:不依赖GUI的命令行应用程序。 - **ASP.NET ...

    ASP.NET 3.5 开发大全11-15

    4.1.5 ASP.NET网站和ASP.NET应用程序的区别 4.2 代码隐藏页模型的解释过程 4.3 代码隐藏页模型的事件驱动处理 4.4 ASP.NET客户端状态 4.4.1 视图状态 4.4.2 控件状态 4.4.3 隐藏域 4.4.4 Cookie 4.4.5 客户端状态...

    ASP.NET 3.5 开发大全1-5

    4.1.5 ASP.NET网站和ASP.NET应用程序的区别 4.2 代码隐藏页模型的解释过程 4.3 代码隐藏页模型的事件驱动处理 4.4 ASP.NET客户端状态 4.4.1 视图状态 4.4.2 控件状态 4.4.3 隐藏域 4.4.4 Cookie 4.4.5 客户端状态...

    ASP.NET网上商城完整源码[201903]

    【ASP.NET网上商城完整源码[201903]】是一个基于C#编程语言开发的电子商务系统,它展示了ASP.NET技术在构建大型在线购物平台中的应用。这个源码项目可能包含了从用户界面设计、商品管理、订单处理、支付接口集成到...

    基于ASP.NET的酒店宾馆管理系统源码.zip

    ASP.NET是Microsoft推出的一种Web应用程序框架,它构建在.NET Framework之上,为开发者提供了丰富的功能和高效的性能,尤其适合用于开发企业级的后台管理系统。 【标签】: 1. 毕业设计: 通常,这样的项目可能是...

    C# ASP.NET 模块 - 在线银行支付模块

    在IT行业中,C# ASP.NET 模块是一个广泛使用的框架,用于构建动态、高效的企业级Web应用程序。在线银行支付模块是此类应用中的一个重要组成部分,它允许用户通过互联网进行安全、便捷的交易。以下是对这个主题的详细...

    ASP.net网上商城

    ASP.NET 是微软开发的一种Web应用程序框架,用于构建动态网站、Web应用和服务。在这个"ASP.net网上商城"项目中,开发者使用了C#编程语言来编写后台逻辑,这是一门面向对象的语言,与ASP.NET框架结合紧密,能提供高效...

    C# ASP.NET 模块 - “支付宝”在线支付

    在IT行业中,C# ASP.NET 模块是用于构建高效、可扩展的Web应用程序的关键工具。结合支付宝这一全球领先的支付平台,我们可以实现“支付宝”在线支付功能,为用户提供安全便捷的交易体验。以下是对这个模块及其相关...

    基于asp.net编写的网上书店

    C#是ASP.NET框架的主要编程语言,它是一种面向对象的语言,具有现代编程语言的所有特点,如类型安全、垃圾回收和强大的库支持。在创建网上书店时,C#用于编写后台代码,处理用户请求,执行数据库操作,以及实现业务...

    基于ASP.net的超市管理系统源码.zip

    1. **ASP.NET架构**:ASP.NET是.NET Framework的一部分,它提供了丰富的服务器控件、事件驱动模型和自动页面状态管理,使得开发者能够更高效地构建Web应用。 2. **C#编程**:ASP.NET通常与C#语言结合使用,这是一种...

Global site tag (gtag.js) - Google Analytics