문제

ASP.NET 응용 프로그램에서 하나 이상의 백그라운드 서비스에 가장 적합한 구현은 무엇입니까?

  1. 타이머 콜백

    Timer timer = new Timer(new TimerCallback(MyWorkCallback), HttpContext, 5000, 5000);
    
  2. 스레드 또는 스레드 풀

    Thread thread = new Thread(Work);
    thread.IsBackground = true;
    thread.Start();
    
  3. 배경 노동자

    BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += new DoWorkEventHandler(DoMyWork);
    worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DoMyWork_Completed); 
    worker.RunWorkerAsync();
    
  4. 캐싱처럼 http://www.codeproject.com/kb/aspnet/aspnetservice.aspx (Jeff Atwood 's에 위치하고 있습니다 여기에 게시하십시오)

주어진 시간에 여러 배경 "서비스"를 실행해야합니다. 한 서비스는 하루에 한 번 다른 서비스가 5 분마다 실행될 수 있습니다. 한 번에 10 개 이상의 서비스가 실행되지 않습니다.

도움이 되었습니까?

해결책

글쎄, '간단한 스레드'대신 스레드 풀로 갈 것입니다.

그리고 그것이 나라면, 나는 그것을 Windows 서비스에서 실행하고 MSMQ를 통해 통신 할 것입니다.

다른 팁

일부 작업 상태를 구현해야합니다. 응용 프로그램 재활용 후 배경 서비스는 깨진 작업을 수리해야합니다. 작업이 트랜잭션에 있으면 해당 동작에 아무런 문제가 없습니다.

원래 포스터의 제안은 둘 이상의 서버로 확장되지 않습니다.

나는 같은 것을 원합니다 : 정기적 인 배경 작업을 예약하는 강력하고 간단한 사용 방법을 사용하고 현재 사용자 요청에 영향을 미치지 않고 임시 중대한 처리 (캐시를 재건)합니다.

Web Apps Context에서 작업을 실행하고 a) Web.config (구성 복제 방지)에서 구성을 가져오고 B) 웹 앱 (Ease Deployment)과 함께 배포됩니다.그리고 웹 사이트가 둘 이상의 서버로 퍼져 나가야합니다.

나는 내가 원하는 것을 다소 제공하는 하나의 접근법 만 발견했습니다.

(1) 각 작업에 대한 .aspx 페이지를 작성하고 웹 사이트 에서이 .aspx를 호출하는 하나의 별도 서버에서 wget 예약 작업을 설정합니다. 나는이 접근법을 구현했지만 작동하지만 예정된 작업 종속성 때문에 100%마음에 들지 않으며 배경에서 무거운 작업을 수행 할 수있는 능력을 제공하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top