Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 134 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado (editado)

Olá a todos,

Estou enfrentando um problema ao processar documentos fiscais usando o Monitor de Captura CTe. A exceção ocorre ao tentar configurar o certificado digital e parece estar relacionada a uma sessão que não existe no arquivo de configuração. Aqui está a mensagem de erro completa:

info: Dfe.Monitor.CapturaCte.Workers.CapturaCte.CapturaCteWorker[0] [MONITOR_CAPTURA_CTE] INICIANDO PROCESSAMENTO DA EMPRESA [572455] - 21459379000172:TKW DECOR LTDA fail: Dfe.Monitor.CapturaCte.Workers.CapturaCte.CapturaCteWorker[0] [MONITOR_CAPTURA_CTE][ProcessarEmpresa] Ocorreu uma exceção ao processar documento fiscal. Exceção: Sessão não [%s] existe no arquivo de configuração - Exceção interna: - StackTrace: at Keevo.Pacotes.Infra.ACBrLib.Core.ACBrLibHandle.CheckResult(Int32 ret) at Dfe.Monitor.CapturaCte.Servicos.AcbrCTeServico.ConfigurarCertificado(ACBrCTe acbrCTe, CertificadoResumoModel certificadodigitalkeevo) in /src/Servicos/AcbrCTeServico.cs:line 53 at Dfe.Monitor.CapturaCte.Workers.CapturaCte.CapturaCteWorker.ProcessarEmpresa(EmpresaParametrosCteSelecaoModel empresacteselecaomodel, SemaphoreSlim semaphoreempresa) in /src/Workers/CapturaCte/CapturaCteWorker.cs:line 207

Alguém já se deparou com esse tipo de erro ou tem alguma ideia de como resolvê-lo? Aqui estão algumas informações adicionais:

  • Estou usando a biblioteca ACBrLib para configurar o certificado digital.
  • O erro parece ocorrer na função ConfigurarCertificado.
  • Verifiquei o arquivo de configuração, mas não encontrei problemas óbvios.

 

Ao verifiar mais percebi que o erro acontecia no Checkresult um metodo da biblioteca do acbr que esta compilado no meu projeto, resultando nos erros que estão nos prints

Abaixo o trecho do meu codigo:
 


            AcbrCTeServico? acbrcteservico = null;

            try
            {
                if (empresacteselecaomodel.datahoraultimaconsulta.AddHours(1).AddMinutes(1) > DateTime.Now.ToSATimeZone())
                    return;

                CertificadoResumoModel certificadodigitalkeevo = _keevocentercertificadoservico.SelecionarPorParametros(empresacteselecaomodel.idempresaevocenter,
                                                                                                                            empresacteselecaomodel.idmaster,
                                                                                                                            AplicativoModel.en_aplicativo.Manifestacao.ToInt());

                if (certificadodigitalkeevo is null || certificadodigitalkeevo.tipocertificado == en_tipocertificado.A3.ToInt() || certificadodigitalkeevo.idcertificado == Guid.Empty)
                    return;

                if (certificadodigitalkeevo != null && certificadodigitalkeevo.idcertificado != Guid.Empty && certificadodigitalkeevo.datavalidade.CompareTo(DateTime.Now.Date.ToSATimeZone()) < 0)
                {
                    _logger.LogInformation($"[MONITOR_CAPTURA_CTE] O certificado {certificadodigitalkeevo.nomecertificado} da empresa [{empresacteselecaomodel.idmaster}]{empresacteselecaomodel.razaosocial}:{empresacteselecaomodel.cnpj} está vencido! Validade: {certificadodigitalkeevo.datavalidade}");
                }
                else if (certificadodigitalkeevo != null && certificadodigitalkeevo.idcertificado != Guid.Empty && certificadodigitalkeevo.tipocertificado == en_tipocertificado.A1.ToInt())
                {
                    LogarInformacaoEmpresa(empresacteselecaomodel.idmaster, empresacteselecaomodel);

                    acbrcteservico = new AcbrCTeServico(empresacteselecaomodel, certificadodigitalkeevo);

                    long retornoNsu = Convert.ToInt64(empresacteselecaomodel.ultimonsu);
                    long maxNsu = 0;

                    do
                    {
                        var resposta = acbrcteservico.DistribuicaoDFe();
                        if (!resposta.CStat.Equals(DOCUMENTO_ENCONTRADO) || resposta.CStat.Equals(CONSUMO_INDEVIDO))
                        {
                            LogarInformacaoBuscaCte(empresacteselecaomodel, resposta);
                            break;
                        }

                        await ProcessarRespostaDistribuicaoDFe(resposta, empresacteselecaomodel);

                        long ultimoNsuConsulta = Convert.ToInt64(empresacteselecaomodel.ultimonsu);
                        maxNsu = Convert.ToInt64(resposta.maxNSU);

                        LogarInformacaoBuscaCte(empresacteselecaomodel, resposta);
                        retornoNsu = Convert.ToInt64(resposta.ultNSU);

                        await SalvarConfiguracaoParametrosEmpresaCte(empresacteselecaomodel, resposta.ultNSU);

                        if (ultimoNsuConsulta == maxNsu)
                            break;

                    }
                    while (retornoNsu <= maxNsu);
                }
            }
            catch (Exception ex)
            {
                LogarException(ex, "ProcessarEmpresa");
            }
            finally
            {
                //acbrcteservico?.Dispose();
                try
                {
                    semaphoreempresa.Release();
                }
                catch (Exception e)
                {
                    LogarException(e);
                }
            }
        }

 

erro 2 acbr.png

Erro acbr.png

Editado por TimeB256
  • Consultores
Postado

Tópico movido para a área do SAC, para que o SLA de respostas seja considerado

3 minutos atrás, TimeB256 disse:

Olá a todos,

Estou enfrentando um problema ao processar documentos fiscais usando o Monitor de Captura CTe. A exceção ocorre ao tentar configurar o certificado digital e parece estar relacionada a uma sessão que não existe no arquivo de configuração. Aqui está a mensagem de erro completa:

Copiar código
info: Dfe.Monitor.CapturaCte.Workers.CapturaCte.CapturaCteWorker[0] [MONITOR_CAPTURA_CTE] INICIANDO PROCESSAMENTO DA EMPRESA [572455] - 21459379000172:TKW DECOR LTDA fail: Dfe.Monitor.CapturaCte.Workers.CapturaCte.CapturaCteWorker[0] [MONITOR_CAPTURA_CTE][ProcessarEmpresa] Ocorreu uma exceção ao processar documento fiscal. Exceção: Sessão não [%s] existe no arquivo de configuração - Exceção interna: - StackTrace: at Keevo.Pacotes.Infra.ACBrLib.Core.ACBrLibHandle.CheckResult(Int32 ret) at Dfe.Monitor.CapturaCte.Servicos.AcbrCTeServico.ConfigurarCertificado(ACBrCTe acbrCTe, CertificadoResumoModel certificadodigitalkeevo) in /src/Servicos/AcbrCTeServico.cs:line 53 at Dfe.Monitor.CapturaCte.Workers.CapturaCte.CapturaCteWorker.ProcessarEmpresa(EmpresaParametrosCteSelecaoModel empresacteselecaomodel, SemaphoreSlim semaphoreempresa) in /src/Workers/CapturaCte/CapturaCteWorker.cs:line 207

Alguém já se deparou com esse tipo de erro ou tem alguma ideia de como resolvê-lo? Aqui estão algumas informações adicionais:

  • Estou usando a biblioteca ACBrLib para configurar o certificado digital.
  • O erro parece ocorrer na função ConfigurarCertificado.
  • Verifiquei o arquivo de configuração, mas não encontrei problemas óbvios.

https://acbr.sourceforge.io/ACBrLib/DFe.html

Verifique se não esta passando o nome da sessão ou nome da propriedade diferente do que esta documentado.. isso pode causar o erro "Sessão não existe no arquivo de configuração".

Se possível, anexe o log, mantenha a configuração dele no nivel 4..

  • Membros Pro
Postado

            AcbrCTeServico? acbrcteservico = null;

            try
            {
                if (empresacteselecaomodel.datahoraultimaconsulta.AddHours(1).AddMinutes(1) > DateTime.Now.ToSATimeZone())
                    return;

                CertificadoResumoModel certificadodigitalkeevo = _keevocentercertificadoservico.SelecionarPorParametros(empresacteselecaomodel.idempresaevocenter,
                                                                                                                            empresacteselecaomodel.idmaster,
                                                                                                                            AplicativoModel.en_aplicativo.Manifestacao.ToInt());

                if (certificadodigitalkeevo is null || certificadodigitalkeevo.tipocertificado == en_tipocertificado.A3.ToInt() || certificadodigitalkeevo.idcertificado == Guid.Empty)
                    return;

                if (certificadodigitalkeevo != null && certificadodigitalkeevo.idcertificado != Guid.Empty && certificadodigitalkeevo.datavalidade.CompareTo(DateTime.Now.Date.ToSATimeZone()) < 0)
                {
                    _logger.LogInformation($"[MONITOR_CAPTURA_CTE] O certificado {certificadodigitalkeevo.nomecertificado} da empresa [{empresacteselecaomodel.idmaster}]{empresacteselecaomodel.razaosocial}:{empresacteselecaomodel.cnpj} está vencido! Validade: {certificadodigitalkeevo.datavalidade}");
                }
                else if (certificadodigitalkeevo != null && certificadodigitalkeevo.idcertificado != Guid.Empty && certificadodigitalkeevo.tipocertificado == en_tipocertificado.A1.ToInt())
                {
                    LogarInformacaoEmpresa(empresacteselecaomodel.idmaster, empresacteselecaomodel);

                    acbrcteservico = new AcbrCTeServico(empresacteselecaomodel, certificadodigitalkeevo);

                    long retornoNsu = Convert.ToInt64(empresacteselecaomodel.ultimonsu);
                    long maxNsu = 0;

                    do
                    {
                        var resposta = acbrcteservico.DistribuicaoDFe();
                        if (!resposta.CStat.Equals(DOCUMENTO_ENCONTRADO) || resposta.CStat.Equals(CONSUMO_INDEVIDO))
                        {
                            LogarInformacaoBuscaCte(empresacteselecaomodel, resposta);
                            break;
                        }

                        await ProcessarRespostaDistribuicaoDFe(resposta, empresacteselecaomodel);

                        long ultimoNsuConsulta = Convert.ToInt64(empresacteselecaomodel.ultimonsu);
                        maxNsu = Convert.ToInt64(resposta.maxNSU);

                        LogarInformacaoBuscaCte(empresacteselecaomodel, resposta);
                        retornoNsu = Convert.ToInt64(resposta.ultNSU);

                        await SalvarConfiguracaoParametrosEmpresaCte(empresacteselecaomodel, resposta.ultNSU);

                        if (ultimoNsuConsulta == maxNsu)
                            break;

                    }
                    while (retornoNsu <= maxNsu);
                }
            }
            catch (Exception ex)
            {
                LogarException(ex, "ProcessarEmpresa");
            }
            finally
            {
                //acbrcteservico?.Dispose();
                try
                {
                    semaphoreempresa.Release();
                }
                catch (Exception e)
                {
                    LogarException(e);
                }
            }
        }

Trcho do codigo e logs

erro 2 acbr.png

Erro acbr.png

  • Consultores
Postado
1 hora atrás, TimeB256 disse:

            AcbrCTeServico? acbrcteservico = null;

            try
            {
                if (empresacteselecaomodel.datahoraultimaconsulta.AddHours(1).AddMinutes(1) > DateTime.Now.ToSATimeZone())
                    return;

                CertificadoResumoModel certificadodigitalkeevo = _keevocentercertificadoservico.SelecionarPorParametros(empresacteselecaomodel.idempresaevocenter,
                                                                                                                            empresacteselecaomodel.idmaster,
                                                                                                                            AplicativoModel.en_aplicativo.Manifestacao.ToInt());

                if (certificadodigitalkeevo is null || certificadodigitalkeevo.tipocertificado == en_tipocertificado.A3.ToInt() || certificadodigitalkeevo.idcertificado == Guid.Empty)
                    return;

                if (certificadodigitalkeevo != null && certificadodigitalkeevo.idcertificado != Guid.Empty && certificadodigitalkeevo.datavalidade.CompareTo(DateTime.Now.Date.ToSATimeZone()) < 0)
                {
                    _logger.LogInformation($"[MONITOR_CAPTURA_CTE] O certificado {certificadodigitalkeevo.nomecertificado} da empresa [{empresacteselecaomodel.idmaster}]{empresacteselecaomodel.razaosocial}:{empresacteselecaomodel.cnpj} está vencido! Validade: {certificadodigitalkeevo.datavalidade}");
                }
                else if (certificadodigitalkeevo != null && certificadodigitalkeevo.idcertificado != Guid.Empty && certificadodigitalkeevo.tipocertificado == en_tipocertificado.A1.ToInt())
                {
                    LogarInformacaoEmpresa(empresacteselecaomodel.idmaster, empresacteselecaomodel);

                    acbrcteservico = new AcbrCTeServico(empresacteselecaomodel, certificadodigitalkeevo);

                    long retornoNsu = Convert.ToInt64(empresacteselecaomodel.ultimonsu);
                    long maxNsu = 0;

                    do
                    {
                        var resposta = acbrcteservico.DistribuicaoDFe();
                        if (!resposta.CStat.Equals(DOCUMENTO_ENCONTRADO) || resposta.CStat.Equals(CONSUMO_INDEVIDO))
                        {
                            LogarInformacaoBuscaCte(empresacteselecaomodel, resposta);
                            break;
                        }

                        await ProcessarRespostaDistribuicaoDFe(resposta, empresacteselecaomodel);

                        long ultimoNsuConsulta = Convert.ToInt64(empresacteselecaomodel.ultimonsu);
                        maxNsu = Convert.ToInt64(resposta.maxNSU);

                        LogarInformacaoBuscaCte(empresacteselecaomodel, resposta);
                        retornoNsu = Convert.ToInt64(resposta.ultNSU);

                        await SalvarConfiguracaoParametrosEmpresaCte(empresacteselecaomodel, resposta.ultNSU);

                        if (ultimoNsuConsulta == maxNsu)
                            break;

                    }
                    while (retornoNsu <= maxNsu);
                }
            }
            catch (Exception ex)
            {
                LogarException(ex, "ProcessarEmpresa");
            }
            finally
            {
                //acbrcteservico?.Dispose();
                try
                {
                    semaphoreempresa.Release();
                }
                catch (Exception e)
                {
                    LogarException(e);
                }
            }
        }

Trcho do codigo e logs

erro 2 acbr.png

Erro acbr.png

Preciso do Log do ACBrLib.. 
https://acbr.sourceforge.io/ACBrLib/Geral.html

Olhando a mensagem de erro.. esta tentando ler ou escrever em uma área de memória protegida. Isso pode ser um problema com a memória do sistema ou com o próprio código...
Pode ser uso de ponteiros inválidos ou corrupção de memória...

Esta utilizando as classes com MultiThreads ? se sim, veja se não esta passando o parâmetro de forma errada.. 

Pode fazer testes com o programa exemplo disponível no svn.. 

  • 2 semanas depois ...
  • Este tópico foi criado há 134 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.