작은 Windows 서비스를 수행 중이며 웹 서비스에서 읽고 로컬 데이터베이스에 데이터를 저장하지만 잠시 동안 (서비스 인 동안) 실행을 완료하지 않습니다. 15 번에서 완벽하게 작동합니다. 아래 코드를 따르십시오.WindowsService가 실행되지 않는 동안
추신 : 제가 디버깅하는 데 사용했던 코드는 시작하기 전에 주석을 달았습니다. 코드를 입력하면 도착하지만 첫 번째 행만 확인하고 나머지는 확인하지 않습니다.
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);
}
}
}
}
}
, 여기 (링크를 A [mcve]을 포함하여 코드를하지 쓰기 고려하시기 바랍니다 :
당신은 당신의 무한 루프를 파괴하지 않고, 당신의 오류를 기록하는 시도 - 캐치와 함께 윈도우 이벤트 로그를 사용할 수 있습니다)이 질문은 링크가 죽은 경우 앞으로 관련성을 가질 수 있습니다. – gravity
코드가 예외를 던지고 있습니까? –
Re : 첫 번째 의견, 한 가지 더 설명하겠습니다. 여기에 도움이 필요하면 좋은 [mcve]를 제공해야합니다. 그렇게하면 질문을 사용할 수 없게되는 것을 방지 할 수있을뿐 아니라 질문에 대답하는 데 필요한 정보를 정확하게 제공 할 수 있습니다. 또한 [ask], 특히 그 페이지 하단에 링크 된 기사를 참고하십시오. –