1、为什么WEB站点要用后台定时任务
也许有人要问,WEB站点本身就后台服务了,为什么还要定制后台定时任务呢?
其实很简单,做过实际WEB应用的人都知道。一个实际站点内经常要做一些后台处理,如统计、评价、数据更新等操作,其中一些任务是非常有规律地重复,当然可以由管理员定期去执行我们开发好的WEB页上的Click事件(大家知道,IIS是客户端响应才执行后台程序的)。
另外还一种情况,就是有些Click执行的操作,IIS响应时间是比较长的,比如作者去年做的一个应用,是评价某一地区的XX问题,由于后台执行一个模型系统,Click后要等3分钟左右才出结果(哈哈,这样的等待你受得了吗?)。这时候就可以用后台定时任务来提前实现,将结果存放好或分解成响应快的任务。
2、如何实现
作者首先想到的是定时器,在自己开发之前,按照以前的习惯上网先查前人的成果,没想到,还真有人想过了,也做过了。在这就不再分析了,以下是摘录原文:
ASP.net 的后台处理技术
在ASP.net的WEB开发中经常会碰到这样的一个问题:即用户操作响应慢的情况。
出现这种情况的原因可能是本身用户操作就是一个耗时的操作,一般。Net程序设计时均在用户提交操作时即在后台处理,等到处理完成后再将操作结果返回给用户。 在小一点的系统中这样设计简单易行,而且性能上也不会有多大的问题,但在大一点的系统中这种设计就会给用户带来不好的操作体验,影响用户对系统的印象好坏。
在我以前实施的系统中对这种情况一般有两种处理方式:一、将用户操作直接记录到后台数据库,由后台程序定时扫描来执行。二、采用Asp.net的定时处理方式,直接在WEB服务器层来进行处理。
两种方式差别并不大,第一种方式主要需要一个后台程序来完成这个扫描工作。
我在这里简单介绍下第二种方式。
它的核心处理就是System.Threading.Timer。这个定时类可以用于在后台定时执行用户提交操作,
它的使用方法:
System.Threading.TimerCallback t=new System.Threading.TimerCallback (你的处理方法);
System.Threading.Timer t = new System.Threading.Timer(t,null,1000,5000);
这一段说明是在启动1秒后每隔5秒就调用所指定的代理。
在具体实现时我定义了三个类。
1、BkExecItem用于保存用户提交操作,同时它也可以序列化到磁盘上,以免关键后台任务丢失。
2、BkExec用于执行。它通过反射来调用BkExecItem中所指定的方法。另外它中间还维护一个先入
先出队列Queue<BkExecItem>,这个队列记录全部的后台处理项。
3、BkManager完成定时器的初始化,模块的参数配置等功能。
呵,暂时总结到这里。下次我会将代码也贴上来,供大家参考下。
一个实用ASP.Net 后台处理类
呵.这回跟大家讨论下ASP.net 后台处理 ,并会把我们当前项目中应用的一个后台处理类的代码贴上来参考.
后台处理也是现在管理系统设计中需要考虑到的一个问题.
什么是后台处理,可以简单认为不是在用户进程处理中完成用户提交的操作,而是将这一处理放到服务端后台进程来处理.
加入后台处理后,可以提高前台用户的操作速度,改善用户操作体验.
对于一般用户来说他对于一个系统的基本要求就是响应及时,用户很难对一个提交操作后需要等待10秒以后的管理系统产生好感,但在实际系统运行中用户操作是很难在短时间内得到响应,所以这个时候后台处理就可以发挥作用了.
我在后面所帖代码中,将需要后台处理的任务均定义成一个ExecItem对象.用户提交操作后,系统将就操作转成一个ExecItem对象加入到BkExecManager(后台处理管理对象)中的一个先入先出的队列中.
网站在启动时会自动启动BkExecManager,而BkExecManager则启动一个定时器来定时处理后台任务队列.
在处理完成时BkExecManager就队列中移去任务对象,如果操作失败将以邮