2017-12-05 25 views
0

私はASP.NET MVCフレームワークを使用して開発されるジョブ割り当てシステムを設計中です。要件の1つは、特定の時間後に(ジョブ割り当て時から1時間または2時間後に)ジョブ(ジョブオペレータに割り当てられている)のステータスをチェックすることです。ステータスが拒否されている場合は、管理者に電子メールを送信する必要があります。特定の時間にコントローラでアクションメソッドを呼び出す方法

は、私が実際に拒否された仕事のためにデータベースを検索し、それがいずれかを見つけた場合、電子メールが管理者に送信されますコントローラ内のアクションメソッドを持っています。電子メールの実装(.Net Postalライブラリを使用)は、アクションメソッド内でも実行されます。

だから私の質問は

1.Howは、特定の時点でコントローラからその特定のアクションメソッドを呼び出すことである(過去に設定することができます例:。今からトリガー2時間)。

2.Isは、バッチファイルを作成し、タスクスケジューラまたはWindowsサービスに割り当てるには、データベースを直接確認し、メールにx分ごとに送信されます何かを実装するよりも、このシナリオでは実現可能でしょうか?

+2

のためにこれを使用するはい、それは別のWindows Windowsのタスクスケジューラとのサービス(または類似)でなければなりません。個人的にも参照してください[この記事](https://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/) –

+2

、IタスクスケジューラやAzure Job Schedulerのような他の人にジョブを渡してください。我々は、あなたがスケジューラを持っていると確信しているいくつかのクラウドプロバイダを使用する場合は、紺碧を大量に使用します。例えばの美しさ。 Azureは文字通りAzure Job SchedulerにURLを渡すだけで、「時刻Xにこれを呼び出し、その後Y分ごとに呼び出すことができます。また、monTasticのようなエラーチェックサービスを見て、スケジュール上のURLにアクセスすることができます –

答えて

1
//Check this out for job scheduling 

//これを使用すると、しばらくして自動的にトリガーするカスタムジョブを作成できます。パッケージ石英

//今すぐあなたの時間有効にジョブを作成//

using System; 
using Quartz; 

namespace FooBar 
{ 
    public class LoggingJob : IJob 
    { 
     public void Execute(IJobExecutionContext context) 
     { 


      Common.Logging.LogManager.Adapter.GetLogger("LoggingJob").Info(
       string.Format("Logging job : {0} {1}, and proceeding to log", 
        DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString())); 

     } 
    } 
} 

ジョブ・クラスを作成

//をインストールします。簡単

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

using Common.Logging; 

using Quartz; 
using Quartz.Impl; 

namespace FooBar 
{ 
    class Program 
    { 

     private static ILog Log = LogManager.GetCurrentClassLogger(); 

     static void Main(string[] args) 
     { 
      try 
      { 
       // construct a scheduler factory 
       ISchedulerFactory schedFact = new StdSchedulerFactory(); 

       // get a scheduler 
       IScheduler sched = schedFact.GetScheduler(); 
       sched.Start(); 

       IJobDetail job = JobBuilder.Create<LoggingJob>() 
        .WithIdentity("myJob", "group1") 
        .Build(); 

       ITrigger trigger = TriggerBuilder.Create() 
        .WithDailyTimeIntervalSchedule 
        (s => 
         s.WithIntervalInSeconds(10) 
          .OnEveryDay() 
          .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(10, 15)) 
        ) 
        .Build(); 

       sched.ScheduleJob(job, trigger); 
      } 
      catch (ArgumentException e) 
      { 
       Log.Error(e); 
      } 
     } 
    } 
} 

//参照 https://www.codeproject.com/Articles/860893/Scheduling-With-Quartz-Net

+0

リンクのみ回答は受け入れられません。 –

+0

申し訳ありませんが、私はそれを知らなかった – avinash

関連する問題