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.

×
×
  • 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...