Ir para conteúdo
  • Cadastre-se

dev botao

AcbrLibNfe - Falha Acces Violation na Consulta Sefaz (NFE_StatusServico)


Ver Solução Respondido por Daniel InfoCotidiano,

Recommended Posts

  • 3 semanas depois ...
  • Consultores
Postado

@Sistemas Drogal
Estamos tentando reproduzir aqui em nosso ambiente então gostariamos de entender como esta gerenciando as requisicoes.
Exemplo.:

--inicia requisição
	//cria um novo ponteiro
	acbr_lib.NFE_Inicializar(ponteiro, PATH_ACBRLIB_INI,"")
	//executa os metodos necessario, exemplo abaixo carregar xml e apos limpar (apenas p ilustrar)
	acbr_lib.NFE_CarregarXML(ponteiro, "3524061113332000167522210000900011861426122-nfe.xml")
	acbr_lib.NFE_LimparLista(ponteiro);
	//finaliza a lib
	acbr_lib.NFE_Finalizar(ponteiro)
	//destroi o ponteiro

Ou você faz de outra forma?
Analisando seus logs com o time, notamos que apos vc executar o ultimo retorno ele deu um erro -10 e não devolveu a msg, a partir dai todos seguem com erros.
Mas se observar deu o erro -10 (12:49) e nao sei se teve alguma tratativa ou timeout
pois as ( 12:59) 10 minutos depois teve uma consulta de status de servico com o mesmo erro.
Aparentemente a lib nao esta em memoria.. ou foi finalizada ou nao foi iniciada novamente.
Por isso as nossas duvidas.

image.png

em nossos testes com 1000 requisições e 100 concorrências e nao tivemos erro.
consegue criar um exemplo simples que apresente o erro ai, para que possamos realizar teste em nosso ambiente ?

 

  • Curtir 1
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

Boa tarde @Daniel InfoCotidiano vou detalhar abaixo como é implementado meu fluxo de emissão.

- Utilizo as classes em alto nível c#; ao iniciar minha aplicação instancio a Lib(classe ACBrNFe) para utilizá-la suas diversas funções relacionadas à NFCE, em momento algum eu a encerro somente ao finalizar da minha aplicação.

- Tenho uma thread apartada que é disparada a cada 10 minutos para consultar o status do Sefaz para facilitar e agilizar meu processo de emissão. Por exemplo, se em minha ultima consulta vi que o Sefaz está provavelmente "offline" não tenho o porquê tentar emitir um NFCE online e já a direciono offline(contingência). Inclusive essa boa prática é descrita no curso de emissão NfCe contingência. 

Se a consulta resultar em alguma exceção não paro a minha aplicação, simplesmente desconsidero  o resultado errôneo.

- No momento da emissão limpo a lista da Lib (LimparLista), carrego a nf (CarregarNota) e a envio (Enviar).

  • Consultores
Postado

Para entender melhor.
vc tem uma API que serve "N"  empresas ? varias requisições? e por isso utiliza Multthread
Ou é um programa desktop q fica em cada PDV instalado ? usando metodos direto , sem passar requisitar a uma outra camada ou api?

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

@Daniel InfoCotidiano só complementando o post anterior; acredito que o erro ocorra na consulta do Sefaz e por consequência "destrua" a lib. No próximo momento que vou utilizá-la, para a emissão por exemplo, tenho a falha.

Segue abaixo a falha mais recente que ocorreu na data de hoje. ACBrLibNFE-20241009.logA falha ocorre em 09/10/24 11:00:45:887 e repare que retorno código -10 sem mensagem de retorno.

@Daniel InfoCotidiano utilizamos PDVs distintos, cada um com suas devidas emissões.

  • Consultores
Postado

Vou ver, sobre a pergunta acima, pode me explicar sobre:
 

29 minutos atrás, Daniel InfoCotidiano disse:

Para entender melhor.
vc tem uma API que serve "N"  empresas ? varias requisições? e por isso utiliza Multthread
Ou é um programa desktop q fica em cada PDV instalado ? usando metodos direto , sem passar requisitar a uma outra camada ou api?

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Consultores
Postado

Observando seu ambiente q vc utiliza pdv distintos. Existem boas praticas para isso.
vc vai utilizar a lib single trhead (multithread sao utilizadas para que quer construir uma API)
e para saber se esta ou nao em off line, vou te mandar um video explicando como proceder, evitar problemas de notas duplicadas.
Como pro vc tem acesso a todo portal de cursos, um deles é sobre contingencia off line.
vou mandar um video especifico para vc entender quando mudar para off line de forma correta.
https://acbr.nutror.com/curso/27abfa7e547e651dbef313cc8bd11dbfc0bbd203/aula/4329988
 

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

@Daniel InfoCotidiano obrigado pela dica do curso, já o fiz e me auxiliou muito. A minha aplicação está totalmente baseada no fluxo disponibilizado por vocês.

image.thumb.png.3bed73af1107e4b92a02747283dd1f3d.png

A grande questão aqui são essas falhas nas consultas do Sefaz. Mesmo que eu utilize o PDV local mais utilizo a Lib em threads distintas, você me aconselha em utilizar a single thread ?

  • Consultores
Postado

Se você utiliza PDV distinto sem API, ideal é vc trabalhar com single thread.
o que pode estar ocasionando erro é estas consultas com threads de status.
quando vc cria a thread para consulta status sefaz, vc cria ponteiro novos para inicializacao, consulta e finalização ? (se possivel destruir o ponteiro)
pq se nao estiver fazendo isso,  pode ser que a tread esta destruindo o ponteiro q fica em uso fora da thread e ocasionando o problema

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

Eu instancio/inicializo a classe em c# consequentemente a lib na abertura da minha aplicação em uma classe estática, ou seja, ela está disponível em todo o momento em que minha aplicação está rodando. 

Vou fazer os testes com a single thread e te dou um retorno.

@Daniel InfoCotidiano essa falha não poderia ser alguma exception não tratada nas classes de alto nível em c# ?

O erro não me parece ser algo relacionado à ponteiro ou a objetos.

 

Att.

  • Consultores
Postado

Antes de vc mudar. vc nao me respondeu sobre isso:
 

24 minutos atrás, Daniel InfoCotidiano disse:

o que pode estar ocasionando erro é estas consultas com threads de status.
quando vc cria a thread para consulta status sefaz, vc cria ponteiro novos para inicializacao, consulta e finalização ? (se possivel destruir o ponteiro)

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Consultores
Postado
Agora, Sistemas Drogal disse:

Não crio novo ponteiro, utilizo a classe estática da minha aplicação que já tem instanciado a Lib.

entao acho q esta ai o problema.
o ponteiro p thread tem q ser um novo ponteiro se nao qdo finalizar vai finalizar o ponteiro q esta em uso.

 

teste assim, talvez vc nao precise mudar p ST

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

Mais ai que ta, minha thread só é responsável por consumir a função de consulta do Sefaz e alimentar uma variável. Em momento algum instancio ou destruo a lib ja instanciada. Veja um trecho do meu código abaixo.

image.thumb.png.911153d6babb1546a3242b45c7636623.png

E quem chama essa operação é uma Task.Run()

image.thumb.png.6ad2734ede0f5a1a115f47d3c488e291.png

  • Consultores
Postado

Então ja q vc utiliza a mesma lib estanciada pq usa a lib multithread ?
Sua aplicação é local, nao recebe requisicoes pelo q entendi
vc tem uma um timer q consulta a sefaz de "n" em "n" tempo

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

Quando implementei a NFCE não tive uma necessidade para utilizar a versão MT, mais decidi a utilizar para eventuais necessidades futuras.

Minha aplicação é local e não recebe requisições. As consultas que realizo no Sefaz ocorrem de 10 e 10 minutos.

Posso alterar para a versão single, mais só pra eu entender que característica da MT poderia estar impactando no erro que estamos investigando ?  

  • Consultores
  • Solution
Postado
42 minutos atrás, Sistemas Drogal disse:

Posso alterar para a versão single, mais só pra eu entender que característica da MT poderia estar impactando no erro que estamos investigando ?  

Nao tive erros em testes com MT, como comentei ontem fizemos 1000 requisições e 100 concorrências e nao tivemos erro.
Pode ser algo relacionado a o ponteiro q vc utiliza. mas precisa analisar o seu lado ai.

SingleThread nao tem ponteiros, como sua aplicacao nao é API, acredito que vc simplifique seu lado. mas vc decide o q vai utilizar.
Se estivesse com problema a lib , estaria pipocando solicitação de suporte de outros usuarios.

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado

Nas simulações de vocês utilizaram Sefaz de produção ?

Creio que não deva ser o erro de ponteiro, porque ja tive casos do erro estourar sem mesmo utilizar as funções de emissão, somente de consulta Sefaz, ou seja, somente uma thread funcionando.

Enfim, vou utilizar a single e observar o seu comportamento.

  • 5 meses depois ...
  • Consultores
Postado
18 horas atrás, Daniel Simoes disse:

@EMBarbosa, você acha que isso está relacionado com os casos que estamos investigando ?

(AV na finalização da DLL, Linux, linguagens que usam garbage colector)

Não parece. O erro que estamos investigando está relacionado com o Finalizar. E gera um erro que a aplicação precisa ser terminada na mesma hora.

Em 25/03/2025 at 11:02, Sistemas Drogal disse:

Segue um exemplo que falhou no momento da emissão. Segue log em anexo, a falha ocorre em 22/03/25 11:10:42:829 -    SetRetorno(-10, Access violation)ACBrLibNFE-20250322.rar

Estou notando muitas chamadas para o comando NFE_LimparLista. Seu código está fazendo essa chamada de forma recorrente?

22/03/25 11:01:35:891 - LIB_ConfigGravar()
22/03/25 11:01:35:891 - Travar
22/03/25 11:01:35:907 - TLibNFeConfig.Gravar: C:\Drogal\PDV\ACBrLib.ini
22/03/25 11:01:35:907 - TLibNFeConfig.Gravar - Feito
22/03/25 11:01:35:923 - Destravar
22/03/25 11:01:35:923 -    SetRetorno(0, )
22/03/25 11:01:35:938 - NFE_StatusServico
22/03/25 11:01:35:938 - Travar
22/03/25 11:01:36:157 -    MoverStringParaPChar. StrLen:199, BufLen:256
22/03/25 11:01:36:157 -    SetRetorno(0, [Status]
CStat=107
CUF=35
DhRecbto=22/03/2025 11:01:02
DhRetorno=
Msg=Serviço em Operação
TMed=60
VerAplic=SP_NFCE_PL_009_V400
Versao=4.00
XMotivo=Serviço em Operação
XObs=
tpAmb=1
)
22/03/25 11:01:36:157 - Destravar
22/03/25 11:10:42:813 - NFE_LimparLista
22/03/25 11:10:42:813 - Travar
22/03/25 11:10:42:829 - Destravar
22/03/25 11:10:42:829 -    SetRetorno(-10, Access violation)
22/03/25 11:10:42:845 - LIB_UltimoRetorno
22/03/25 11:10:42:845 -    MoverStringParaPChar. StrLen:16, BufLen:256
22/03/25 11:10:42:860 -    Codigo:-10, Mensagem:Access violation

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Consultores
Postado
10 minutos atrás, EMBarbosa disse:
22/03/25 11:01:36:157 - Destravar
22/03/25 11:10:42:813 - NFE_LimparLista

Outra coisa que eu percebi foi essa diferença no tempo. A aplicação ficou quase 10 minutos antes do comando NFE_LimparLista.

O que você acha que aconteceu nesse intervalo de tempo? 

Outra coisa, porque o NFE_LimparLista foi o primeiro comando a ser executado?

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...