2011-01-05 8 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(); 
     } 

    } 

ここでは動作しますが、今回はタイマーイベントのように時間内にそのコードを処理できませんでした。私はあなたが(SamAgain応答を参照してください)このスレッドを試すことができます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と同じですか? –

答えて

関連する問題