0

我正在閱讀使用Quartz http://quartznet.sourceforge.net/tutorial/lesson_3.html,但我不明白如何實現。我也讀這http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/,也不明白如何實施,具體而言,我在哪裏放,它如何訪問我的控制器/操作?在VB中安排任務ASP.NET MVC

對上面鏈接的文章有一條評論,建議使用「... 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 

回答

1

我通常認爲有一個網絡服務器做自動化是不好的做法,我寧願將它留在一個更適合自動化作業的服務中。

也就是說,使用上述條每頁,我會把使用Quartz.net標題爲進的Application_Start在Global.asax中

在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

+0

感謝您的回答。我有一個更好的理解;但是我不知道**在Quartz.net中放入global.asax中application_start的部分。「另外,如何關閉application_end中的作業調度程序? – user1477388

+1

下面是一個快速示例,它每隔一小時運行一次觸發器,您需要將其更改爲符合您的要求 – Slicksim

+0

謝謝,Slicksim。這很有幫助。 – user1477388