2011-01-05 4 views
0

나는 바보짓을하고있다. 나는 그 문제를 알아낼 수 없다.Windows 서비스의 이벤트 처리기 문제

나는 간단한 타이머 방법이있는 Windows 서비스가 있습니다. 서비스를 시작하면 항상 onTimerElapsed 이벤트에서 예외가 발생합니다. 그러나 XMLOperation 메서드를 다른 메서드 (다만 필요한 타이머가 아닌)에 작성하고 program.cs에서 호출하면 올바르게 작동합니다. 작업 코드도 맨 아래에 있습니다.

partial class DatabaseService : ServiceBase 
{ 
    Timer timer = new Timer(); 

    public DatabaseService() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     timer.Interval = 10000; 
     timer.Enabled = true; 

     timer.Elapsed += new ElapsedEventHandler(onElapsedTime); 
     timer.Start(); 
    } 

    protected override void OnStop() 
    { 
     timer.Enabled = false; 
    } 

    public void onElapsedTime(object source, ElapsedEventArgs e) 
    { 
     try 
     { 
      XMLOperations operation = new XMLOperations(); 
      operation.WebServiceFlexiCampaigns("http://www.flexi.com.tr/data/xml/pazaryeri/mobil.xml"); 
      operation.WebServiceShopMilesCampaignsXMLRead("http://www.shopandmiles.com/xml/3_119_3.xml"); 
      operation.WebServiceBonusCampaignsXMLRead("http://www.bonus.com.tr/apps/getcampaignxml.aspx?type=campaigns"); 
     } 

     catch (Exception ex) 
     { 
      StreamWriter SW; 
      SW = File.CreateText("c:\\1.txt"); 
      SW.WriteLine(ex.Message); 
      SW.Close(); 
     } 

    } 

여기가 작동하지만 이번에는 타이머 이벤트에서 할 수있는 것처럼 해당 코드를 작동하지 못했습니다. 내가 program.cs

partial class DatabaseService : ServiceBase 
{ 
    Timer timer = new Timer(); 

    public DatabaseService() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     timer.Interval = 10000; 
     timer.Enabled = true; 

     timer.Elapsed += new ElapsedEventHandler(onElapsedTime); 
     timer.Start(); 
    } 

    protected override void OnStop() 
    { 
     timer.Enabled = false; 
    } 
    public void test() 
    { 
     try 
     { 
      XMLOperations operation = new XMLOperations(); 
      operation.WebServiceFlexiCampaigns("http://www.flexi.com.tr/data/xml/pazaryeri/mobil.xml"); 
      operation.WebServiceShopMilesCampaignsXMLRead("http://www.shopandmiles.com/xml/3_119_3.xml"); 
      operation.WebServiceBonusCampaignsXMLRead("http://www.bonus.com.tr/apps/getcampaignxml.aspx?type=campaigns"); 
     } 
     catch (Exception ex) 
     { 
      StreamWriter SW; 
      SW = File.CreateText("c:\\1111.txt"); 
      SW.WriteLine(ex.Message); 
      SW.Close(); 
     } 
    } 
+0

더 나은 방법을 사용하려면 (StreamWriter SW = File.CreateText ("c : \\ 1111.txt")) {SW.WriteLine (ex.Message); } –

+0

어떤 예외가 발생합니까? –

+3

실패한 버전에서'1.txt'로 출력되는 것을 게시 할 수 있다면 도움이 될 것입니다. 내 추측은 서비스에 대한 사용 권한 문제입니다. 어떤 계정에서 실행됩니까? (비 서비스) 코드를 실행할 때 로그인 ID와 동일합니까? –

답변