Skip to content

ASP.NET与Quartz.NET计划任务

很多时候我们希望在应用程序中按指定时间执行一些任务,一种解决办法是使用客户端就用程序或WINDOWS服务来执行,较早的一些项目就是采用这些方法,写个简单的控制台应用程序,然后由WINDOWS任务计划调用。这又让我想起我的一个同学,他曾经也在他的项目中使用WINDOWS服务来解决问题。

在ASP.NET应用程序中,并不是只能采用以上那些办法。取而代之的是通过IIS线程执行你的任务。而Quartz是第三方开源的作业调度框架,而Quartz.NET是Open Symphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。

在Quartz.NET有三个主要组成部分:调度,作业和触发器。写到这里感觉很多余,关于Quartz.NET方面的知识,我这里将提供一些地址。而这里我将叙述遇到的一些问题及解决方案:

1、应用池回收调度停止

Quartz.NET本身是寄托于IIS线程上面,所以一但应用池回收,导致放在内存中的数据也跟着丢失。因此对于这个问题,需要从IIS应用池配置、ASP.NET应用程序双方面结合。

IIS应用池配置主要是减少线程自动回收,主要影响因素包括:回收工作进程(分钟)、空闲超时关闭工作进程。

ASP.NET应用程序处理办法通过Application_Start和Application_End分别加载Quartz.NET和关闭Quartz.NET,特别是在Application_End时可以使用类似这种萎缩的方式,解决当由IIS应用池回收自动加载问题:

Thread.Sleep(1000);
string url = "Web Url";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();

其实综合起来并不能很好解决所有问题,比较机器重启后等。

2、等待

参考文档

  1. 开源的作业调度框架 – Quartz.NET
  2. Quartz.NET – Enterprise Job Scheduler for .NET Platform(官网)

相关日志

Categories: 技术.

Tags: ,

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word