2017-03-31 10 views
0

私は小さなWindowsサービスを実行していますが、Webサービスから読み込んでローカルデータベースにデータを格納しますが、while(サービス)の実行は終了しません。私はそれを完全に動作する15日にそれをデバッグしている、以下のコードに従ってください。WindowsServiceは実行中ではありません

PS:私がデバッグするのに使用したコードは、開始前にコメントしていますが、それは入力されるまでには到着しますが、最初の行のみが残りをチェックしません。

Program.csの

using System.ServiceProcess; 

namespace rdi_server.service 
{ 
static class Program 
{ 
    static void Main() 
    { 

     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new Service1() 
     }; 
     ServiceBase.Run(ServicesToRun); 
    } 
} 
} 

Service1.CS

using System; 
using System.Configuration; 
using System.ServiceProcess; 
using System.Threading; 

namespace rdi_server.service 
{ 
    public partial class Service1 : ServiceBase 
{ 

    private Thread _thread; 

    private Updater _updater = new Updater(); 

    private readonly int Interval = Convert.ToInt32(ConfigurationManager.AppSettings["timer"]); 
    private readonly string Connection = ConfigurationManager.AppSettings["connection"]; 

    private readonly Connector _usuarioConnector; 
    private readonly Connector _bandaConnector; 
    private readonly Connector _generoConnector; 
    private readonly Connector _musicaConnector; 

    public Service1() 
    { 
     _usuarioConnector = new Connector("UsuarioBase"); 
     _bandaConnector = new Connector("BandaBase"); 
     _generoConnector = new Connector("GeneroBase"); 
     _musicaConnector = new Connector("MusicaBase"); 

     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     StartDebug(); 
    } 

    public void StartDebug() 
    { 
     _thread = new Thread(OnTime); 
     _thread.Name = "My Worker Thread"; 
     _thread.Start(); 
    } 

    protected override void OnStop() 
    { 

    } 

    protected void OnTime() 
    { 
     while (true) 
     { 
      EventLog.WriteEntry("Dentro do WHILE foi executado!"); 
      _updater.Do(Connection, _usuarioConnector, _generoConnector, _bandaConnector, _musicaConnector); 
      EventLog.WriteEntry("Fim do while"); 
      Thread.Sleep(Interval); 
     } 
    } 
} 
} 

Updater.CS

using rdi_musica.core; 
using System.Collections.Generic; 
using System.Data.SqlClient; 

    namespace rdi_server.service 
    { 
    class Updater 
    { 
    public void Do(string Connection, 
         Connector usuario, 
         Connector genero, 
         Connector banda, 
         Connector musica) 
    { 

     var usuarios = Loader.LoadUsuarios(usuario); 
     var generos = Loader.LoadGeneros(genero); 
     var bandas = Loader.LoadBandas(banda); 
     var musicas = Loader.LoadMusicas(musica); 


     using (var connection = new SqlConnection(Connection)) 
     { 
      connection.Open(); 

      foreach (var _usuario in usuarios) 
      { 
       DomainDAO.InsertUsuario(connection, _usuario); 
      } 
      foreach (var _genero in generos) 
      { 
       DomainDAO.InsertGenero(connection, _genero); 
      } 
      foreach (var _banda in bandas) 
      { 
       DomainDAO.InsertBanda(connection, _banda); 
      } 
      foreach (var _musica in musicas) 
      { 
       DomainDAO.InsertMusica(connection, _musica); 
      } 
     } 
    } 
} 
} 
+2

を[MCVE]コード(ここでは、ありませんリンクを含む書き込みをご検討ください)リンクが死んでしまうと、この質問は将来的には関連性があります。 – gravity

+1

コードで何らかの例外が発生していますか? –

+0

Re:最初のコメント、もう一度行きます:ここで助けが必要な場合は、良い[mcve]を提供する必要があります。そうすることで、あなたの質問が使えなくなるのを防ぐだけでなく、質問に答えるために必要な情報を正確に提供しました。 [ask]、特にそのページの下部にリンクされている記事を参照してください。 –

答えて

0

おそらく何起こっているのはあなたのどこかで起こっている未処理の例外があり、それがあなたのwhileループから壊れているということです。

あなたはあなたの無限ループを壊すことなく、自分のエラーを記録するためのtry-catchと組み合わせて、Windowsのイベントログを使用することができます。

protected void OnTime() 
{ 
    while (true) 
    { 
     try 
     { 
      EventLog.WriteEntry("Dentro do WHILE foi executado!"); 
      _updater.Do(Connection, _usuarioConnector, _generoConnector, _bandaConnector, _musicaConnector); 
      EventLog.WriteEntry("Fim do while"); 
     } 
     catch (Exception ex) 
     { 
      this.EventLog.WriteEntry("ERROR: " + ex.GetType().ToString() + " : " + ex.Message + " : " + ex.StackTrace, EventLogEntryType.Error); 
     } 

     Thread.Sleep(Interval); 
    } 
} 
+0

いいえ、私はこれを行いましたが、何もしませんでしたが、私はそれをデバッグしているとき完全に動作し、Webサービスに接続し、情報を取得してデータベースに書き込みます –

関連する問題