0

我正在阅读使用 Quartz http://quartznet.sourceforge.net/tutorial/lesson_3.html但我不明白如何实现。我也在阅读此https://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
4

1 回答 1

1

我通常认为让 Web 服务器进行自动化是不好的做法,我更喜欢将其保留在更适合自动化工作的服务中。

也就是说,使用上面的文章,我会将标题为 using 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 类中获取。

于 2012-09-04T20:26:04.513 回答