Elapsed Timer event is not running in service DLL

0

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();
        }
    }
    
asked by anonymous 23.02.2018 / 16:15

0 answers