MVC3网站内的Job Scheduler

时间:2012-08-04 22:02:24

标签: c# asp.net-mvc-3 job-scheduling quartz.net-2.0

我正在寻找一些指导,以便在我的MVC3网站INSIDE中使用Job Scheduler设置。我一直在寻找Quartz.NET,但是我很难在网上找到指导,以确保它在网站运行时运行。

考虑到上述信息。我知道在IIS中设置作业调度程序有一些“缺点”。我想要设置的工作是简单的清理工作,其中时间相当不重要,所以如果IIS通过并回收网站的线程,它真的不会是一个大问题。即。如果它每天运行10次由于回收/重新启动网站线程会很好/如果它每月运行一次,因为线程没有开始那么好(虽然不太可能)。

我似乎回想起关于SO的帖子或通过Google发布的帖子显示在Application_Start()中的Global.asax内进行设置,但现在无法在任何地方找到此信息。有没有人对如何实现与我所说的相似的东西有任何建议?

2 个答案:

答案 0 :(得分:2)

经过一些搜索后,我发现了this关于SO的问题,该问题涉及在global.asax文件中实现Quartz.NET。

为了实现它,我只是在新的(在本帖子发布时)下载包中引用Quartz.dll并使用以下代码...

    protected void Application_Start()
    {
        /*
         * Include other Application_Start() code...
         */

        //Job Scheduling
        try {
            //Setup the new Scheduler
            var sf = new StdSchedulerFactory();
            var sched = sf.GetScheduler();
            sched.Start();

            //Setup the Job
            var jobDetail = new JobDetailImpl( "myJob", null, typeof( DocCleanup ) );

            //Create 1 week trigger that will go on forever
            var trigger = new SimpleTriggerImpl( "jobTrigger", SimpleTriggerImpl.RepeatIndefinitely, new TimeSpan( 168, 0, 0 ) );
            trigger.StartTimeUtc = DateTimeOffset.Now;

            //Add the job to the scheduler
            sched.ScheduleJob( jobDetail, trigger );
        } catch (Exception ex) { //Implement Exception code... }
    }

我不想为这个特殊需求创建一个控制台应用程序/ sql job / etc。这主要是由于我的问题中提到的可接受的极端不可靠性。如果你需要任何关于作业何时运行的保证,我怀疑你会想要以这种方式实现Quartz.NET。

答案 1 :(得分:0)

您可以创建一个控制台应用程序来执行清理作业(我不确定您要进行哪种清理)。您可以使用Windows任务计划程序在特定时间间隔内调用此应用程序来完成工作

另一个选项是创建一个将在特定时间间隔执行的SQL作业。作业中的存储过程可以调用托管代码。所以你可以从那里调用你的网络代码。

如果只是简单地清理SQL表,只需编写一个执行它的SQL作业。