[asp.net] 예약 된 작업을 실행하는 가장 좋은 방법

오늘 우리는 ASP.NET 웹 사이트에 대해 예약 된 작업을 실행하기위한 콘솔 응용 프로그램을 만들었습니다. 그러나이 접근법은 약간 오류가 발생하기 쉽고 유지 관리가 어렵다고 생각합니다. 예약 된 작업을 어떻게 수행합니까 (Windows / IIS / ASP.NET 환경에서)

최신 정보:

작업 예 :

  • 데이터베이스의 이메일 큐에서 이메일 보내기
  • 데이터베이스에서 오래된 오브젝트 제거
  • Google 애드워즈에서 통계를 검색하고 데이터베이스에서 테이블을 채 웁니다.


답변

웹 사이트에 대한 모든 내 작업 (예약해야 함)은 웹 사이트 내에 유지되며 특수 페이지에서 호출됩니다. 그런 다음이 페이지를 너무 자주 호출하는 간단한 Windows 서비스를 작성했습니다. 페이지가 실행되면 값을 반환합니다. 수행해야 할 작업이 더 많다는 것을 알고 있으면 바로 페이지를 다시 실행하고, 그렇지 않으면 잠시 동안 실행합니다. 이것은 저에게 정말 효과적이며 모든 작업 논리를 웹 코드와 함께 유지합니다. 간단한 Windows 서비스를 작성하기 전에 Windows 스케줄러를 사용하여 x 분마다 페이지를 호출했습니다.

이를 실행하는 또 다른 편리한 방법은 Pingdom 과 같은 모니터링 서비스를 사용하는 것 입니다. http 확인을 서비스 코드를 실행하는 페이지로 지정하십시오. 페이지에 결과가 표시되도록하여 Pingdom을 트리거하여 무언가 잘못되었을 때 경고 메시지를 보내도록 할 수 있습니다.


답변

Jeff Atwood가 Stackoverflow를 위해 사용한이 기술 은 내가 만난 가장 간단한 방법입니다. ASP.NET의 캐시 시스템에 구축 된 “캐시 항목 제거”콜백 메커니즘에 의존합니다.

업데이트 : Stackoverflow 가이 방법을 능가했습니다. 웹 사이트가 실행되는 동안에 만 작동하지만 많은 사람들에게 유용한 매우 간단한 기술입니다.

Quartz.NET 도 확인하십시오


답변

사용자 정의 Windows 서비스를 작성하십시오 .

예정된 콘솔 앱으로 미션 크리티컬 한 작업을 설정했으며 유지 관리가 어렵다는 것을 알게되었습니다. 몇 분마다 DB의 일정을 확인하는 ‘하트 비트’가 포함 된 Windows 서비스를 만들었습니다. 정말 잘되었습니다.

그럼에도 불구하고, 여전히 중요하지 않은 대부분의 유지 관리 작업에 예약 된 콘솔 앱을 사용합니다. 고장 나지 않았다면 고치지 마십시오.


답변

나는 이것이 관련된 모든 사람들에게 쉬운 것으로 나타났습니다.

  • DoSuchAndSuchProcess와 같은 웹 서비스 메소드 작성
  • 이 웹 메서드를 호출하는 콘솔 앱을 만듭니다.
  • 작업 스케줄러에서 콘솔 앱을 예약하십시오.

이 방법론을 사용하면 모든 비즈니스 로직이 웹 앱에 포함되어 있지만 Windows 작업 관리자 또는 다른 상업용 작업 관리자의 안정성을 통해 실행 보고서와 같은 반환 정보를 기록 할 수 있습니다. 페이지에 게시하는 대신 웹 서비스를 사용하면 웹 서비스에서 반환 데이터를 쉽게 얻을 수 있기 때문에 약간의 이점이 있습니다.


답변

휠을 재발 명하는 이유는 스레딩 및 타이머 클래스를 사용하는 것입니다.

    protected void Application_Start()
    {
        Thread thread = new Thread(new ThreadStart(ThreadFunc));
        thread.IsBackground = true;
        thread.Name = "ThreadFunc";
        thread.Start();
    }

    protected void ThreadFunc()
    {
        System.Timers.Timer t = new System.Timers.Timer();
        t.Elapsed += new System.Timers.ElapsedEventHandler(TimerWorker);
        t.Interval = 10000;
        t.Enabled = true;
        t.AutoReset = true;
        t.Start();
    }

    protected void TimerWorker(object sender, System.Timers.ElapsedEventArgs e)
    {
        //work args
    }


답변

Windows 스케줄러를 사용하여 웹 페이지를 실행하십시오.

악의적 인 사용자 또는 검색 엔진 스파이더가이를 실행하지 못하도록하려면 예약 된 작업을 설정할 때 간단히 쿼리 문자열을 사용하여 웹 페이지를 호출하십시오. 예 : mypage.aspx? from = scheduledtask

그런 다음 페이지로드시 간단히 조건을 사용하십시오. if (Request.Querystring [ “from”] == “scheduledtask”) {// executetask}

이렇게하면 검색 엔진 스파이더 나 악의적 인 사용자가 예약 된 작업을 실행할 수 없습니다.


답변

이 라이브러리는 매력처럼 작동합니다
http://www.codeproject.com/KB/cs/tsnewlib.aspx

.NET 코드를 통해 Windows 예약 작업을 직접 관리 할 수 ​​있습니다.