2013-04-19 3 views
0

웹 서비스가 있고 타이머를 사용했습니다. 내 vs2010 내에서 서비스 응용 프로그램을 실행할 때 매력처럼 작동합니다. 하지만 원격 서버에 배포하면 ElapsedEventHandler가 실행되지 않습니다. Logger를 사용하여 이벤트를 기록하고 로그 파일에 쓰기 권한을 설정했습니다. 더 자세히 설명하겠습니다. 나는 일자리를 기다리는 서비스를 쓰려고 노력 중이며 일은 큰 목록으로 이메일을 보내고있다. 이메일은 20 초 간격으로 보내야합니다. 여기 내 코드의 일부입니다 :system.timers.timer가 서버에서 경과 된 이벤트를 실행하지 않습니다.

public class EmailSender : IEmailSender 
{ 

    Queue<AdvEmail> ListOfEmails = new Queue<AdvEmail>(); 
    List<EmailJob> EmailJobs = new List<EmailJob>(); 

    Timer timerFetchJobs = null; 
    Timer timerSendEmails = null; 

    public EmailSender() 
    { 
     try 
     { 
      Logger.Log("init service"); 
      timerFetchJobs = new Timer(); 
      timerFetchJobs.Interval = 5 * 1000; 
      timerFetchJobs.Elapsed += new ElapsedEventHandler(timerFetchJobs_Elapsed); 
      timerFetchJobs.Enabled = true; 
      timerSendEmails = new Timer(); 
      timerSendEmails.Interval = 20 * 1000; 
      timerSendEmails.Elapsed += new ElapsedEventHandler(timerSendEmails_Elapsed); 
      timerSendEmails.Enabled = true; 
      timerFetchJobs.Start(); 
      timerSendEmails.Start(); 
      Logger.Log("init service Ended Succefully"); 
      Logger.Log("timerFetchJobs.Enabled=" + timerFetchJobs.Enabled.ToString()); 
      Logger.Log("timerSendEmails.Enabled=" + timerSendEmails.Enabled.ToString()); 
     } 
     catch (Exception ex) 
     { 
      Logger.Log("Error in InitService. Message: " + ex.Message); 
     } 
    } 

    void timerSendEmails_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     timerSendEmails.Stop(); 
     Logger.Log("Checking for Emails in the Queue"); 
     // some statments here 

     timerSendEmails.Start(); 
    } 

    void timerFetchJobs_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     timerFetchJobs.Stop(); 
     try 
     { 
      FetchJobsFromDB(); 
     } 
     catch (Exception ex) 
     { 
      Logger.Log("Error in timerFetchJobs. Message: " + ex.Message); 
     } 
     timerFetchJobs.Start(); 
    } 

내가 브라우저에서 서비스 addreess에 갈 때, 그것은 초기화되지 올바르게 초기화 수준을 기록하지만, 타이머를 발사의 단서! 나는 그 이유를 모른다? 내가 뭘 잘못하고있어? 감사

편집 : 여기 내가 로컬로 실행 로그 파일입니다

로그 항목 : 1392년 1월 30일 8시 47분 9초 : 초기화 서비스 ------- ------------------------

로그 항목 : 1392/01/30 08:47:09 :: 초기화 서비스가 끝났습니다. --- ----------------------------

로그 항목 : 1392/01/30 08:47:09 :: timerFetchJobs.Enabled = True -------------------------------

로그 항목 : 1392/01/30 08:47:09 :: timerSendEmails.Enabled = True --------------------------- ----

로그 항목 : 1392/01/30 08:47:14 :: 데이터베이스에서 작업 확인 --------------------- ----------

로그 항목 : 1392/01/30 08:47:16 : : 새로운 직업이 있습니다. 작업 이름은 패드 71입니다. -------------------------------

로그 항목 : 1392/01/30 08 : 47:19 : : 업무용 이메일 추가하기 패드 71 -------------------------------

여기 원격 서버에 배포 할 때 로그 파일입니다.

로그 항목 : 1392/01/30 08:47:09 :: init 서비스 ----------------- --------------

로그 항목 : 1392/01/30 08:47:09 :: 초기화 서비스가 끝났습니다. ------------- ------------------

로그 항목 : 1392/01/30 08:47:09 :: timerFetchJobs.Enabled = True ----------------------------- ---

로그 항목 : 1392/01/30 08:47:09 :: timerSendEmails.Enabled = True ----------------------- --------

답변

0

Logger 클래스가 변경되어 문제가 해결되었습니다. 왜 서버에서 작동하지 않았는지 모르겠다.

관련 문제