I created a service DLL and set up a timer for this service to run at certain intervals.
But I have a lot of doubts about when I run the service through VS 2013, the service runs the first time the Elapsed
of timer event is not running.
There is a possibility to install this service on my machine for testing, or I can only run it by running VS 2013 Start.
My biggest problem is that even when starting the service the first time the Elapsed
is not running. I do not know the reason. Following source:
protected override void OnStart(string[] args)
{
StartTimer();
}
private void StartTimer()
{
_Timer = new System.Timers.Timer();
_Timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
_Timer.AutoReset = false;
_Timer.Enabled = true;
_Timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
_Timer.Stop();
/* OBTER INTERVALO CONFIGURADO PARA EXECUÇÃO DO PROCESSAMENTO */
DAOParameters daoParameters = new DAOParameters(_Database);
VOParameters voParameterFaturamento = daoParameters.GetParametrizacaoServicoProcessarFaturamento();
/* SE NÃO TIVER CONFIGURADO SERÁ DADO UM LOG PARA QUE O USUÁRIO POSSA REALIAR A CONFIGURAÇÃO DO HORÁRIO. */
if (voParameterFaturamento == null || String.IsNullOrEmpty(voParameterFaturamento.Value))
{
_Log.Error("Parâmetro de processar faturamento não tem horário de intervalo configurado.");
return;
}
/* PREPAR INTERVALO CONFIGURADO */
string[] arrayInterval = voParameterFaturamento.Value.Split(':');
double interval = (Convert.ToDouble(arrayInterval[0]) * 60 * 1000) + ((Convert.ToDouble(arrayInterval[1]) * 0.01) * 60 * 1000) ;
try
{
_Log.Info("---------------- Início do processo de solicitação de relatório de processamento (Faturamento) ----------------");
StartProcessaFaturamento();
_Log.Info("---------------- Fim do processo de solicitação de relatório de processamento (Faturamento) ----------------");
}
catch (Exception ex)
{
_Log.Fatal("Erro fatal.", ex);
}
_Timer.Interval = interval;
_Timer.Start();
}
private void StartProcessaFaturamento()
{
_Log.Debug(">> Start Processo Faturamento ");
try
{
_Database.Open();
DAOB2BRequestProcessingReport daoRPR = new DAOB2BRequestProcessingReport(_Database);
DAOB2BRequestProcessingReportProcess daoRPRP = new DAOB2BRequestProcessingReportProcess(_Database);
_Log.Debug("Obter solicitações de relatórios processamento pendentes para processamento");
daoRPR.GetRequestProcessingReportAguardandoProcessamento()
.ForEach((x) =>
{
try
{
_Log.Debug("Inicia transação");
_Database.BeginTransaction();
_Log.Debug("Processa faturamento Depósito");
daoRPRP.ProcessarRPRTipoFaturamentoDeposito(x.IdRPR);
_Log.Debug("Processa faturamento Conta");
daoRPRP.ProcessarRPRTipoFaturamentoConta(x.IdRPR);
_Log.Debug("Update request como processado");
daoRPR.SetRequestProcessingReportProcessed(x.IdRPR);
_Log.Debug("Processamento concluído com sucesso.");
_Database.Transaction.Commit();
}
catch (Exception e)
{
_Database.Transaction.Rollback();
_Log.Error("Erro ao processar faturamento", e);
}
});
}
catch (Exception e)
{
_Log.Error("Erro ao processar faturamento.", e);
}
finally
{
_Database.Close();
}
}