我正在阅读使用Quartz http://quartznet.sourceforge.net/tutorial/lesson_3.html,但我不明白如何实现。我也在读这个http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/,也不明白如何实现,具体来说,我在哪里放置它以及如何访问我的控制器/动作?
上面链接的文章有一条评论建议使用“...... global.asax中的一个简单计时器”。如何实现这一目标?
基本上,我想知道如何(以及最好的方法)在以下控制器上安排以下操作?
Public Class RssController
Inherits System.Web.Mvc.Controller
Function InsertRssFeedItem(ByVal url as String) As ActionResult
' code to get RSS and insert into database '
End Function
End Class
答案 0 :(得分:1)
我一般认为让Web服务器进行自动化是不好的做法,我更喜欢将其放在更适合自动化作业的服务中。
那就是说,使用上面的技巧,我会把标题为Quartz.net的部分放入global.asax中的application_start
在application_end中,关闭作业调度程序。
最后,在一个文件夹中,写一个类,如:
<强> c#中强>
public class InsertRssFeedJob : IJob
{
public void Execute(JobExecutionContext context)
{
var rssController = new RssController();
rssController.InsertRssFeedItem("");
}
}
<强> vb.net 强>
Public Class InsertRssFeedJob
Implements IJob
Public Sub Execute(context as JobExecutionContext)
Dim rssContoller = new RssController()
rssController.InsertRssFeedItem("")
End Sub
End Class
抱歉,我不熟悉VB在IDE之外编写它,所以你需要转换这个c#。
private static IScheduler _scheduler;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
_scheduler = new StdSchedulerFactory().GetScheduler();
JobDetail jobDetail = new JobDetail("rssFeedJob", null, typeof(InsertRssFeedJob));
// fire every hour
Trigger trigger = TriggerUtils.MakeHourlyTrigger();
// start on the next even hour
trigger.StartTime = TriggerUtils.GetEvenHourDate(DateTime.UtcNow);
trigger.Name = "myTrigger";
_scheduler.ScheduleJob(jobDetail, trigger);
}
protected void Application_End()
{
_scheduler.Shutdown();
}
此外,如果RssController需要访问任何上下文信息,您需要从HttpContext类中获取它。
的Si