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サーバーを用意することは悪い習慣だと考えています。自動化されたジョブにより適したサービスに近づかないことを望んでいます。

そうは言っても、上記の記事を使用して、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

于 2012-09-04T20:26:04.513 に答える