2017-12-05 1 views
0

작업 할당 시스템은 ASP.NET MVC 프레임 워크를 사용하여 개발할 예정입니다. 요구 사항 중 하나는 특정 시간 (작업 할당 시간으로부터 1 시간 또는 2 시간이 될 수 있음) 이후 작업 (작업 운영자에게 할당 된)의 상태를 확인하는 것입니다. 상태가 거절 된 경우 시스템에서 관리자에게 이메일을 보내야합니다.특정 시간에 컨트롤러에서 작업 방법을 호출하는 방법

저는 실제로 데이터베이스에서 거부 된 작업을 검색하는 컨트롤러에 조치 방법이 있으며, 발견 된 경우 이메일이 관리자에게 전송됩니다. 전자 메일 구현 (.Net 우편 라이브러리 사용)도 메소드 메소드 내부에서 수행됩니다.

그래서 제 질문은

1.How는 특정 시간에 컨트롤러에서 특정 액션 메소드를 호출하는 것입니다 (과거에 설정할 수 있습니다 예 :. 지금부터 트리거 2 시간을).

2. 배치 파일을 만들고 작업 스케줄러 또는 Windows 서비스에 할당하는 것이이 시나리오에서 가능합니다. 데이터베이스를 직접 확인하고 매 x 분마다 전자 메일을 보내는 무언가를 구현하는 것보다 간단합니까?

+2

예는 Windows 작업 스케줄러 (또는 유사)와 별도의 Windows 서비스를해야합니다. [이 기사를 참고하십시오] (https://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx/) –

+2

개인적으로, 저는 Task Scheduler .. 또는 Azure Job Scheduler와 같은 다른 사람에게 작업을 넘깁니다. 우리는 하늘빛을 무겁게 사용합니다. 만약 당신이 어떤 클라우드 공급자를 사용한다면 나는 그들이 스케줄러를 가지고 있다고 확신합니다. 예를 들어. Azure는 문자 그대로 Azure Job Scheduler에 URL을 제공 할 수 있습니다. "그 다음에는 X 시간에 전화를 걸고 그 후에 매 Y 분마다 전화를 걸 수 있습니다. 또한 일정에 따라 URL을 방문 할 수있는 monTastic과 같은 오류 검사 서비스를 볼 수도 있습니다. –

답변

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

관련 문제