Jump to content

dev botao

Problema de Concorrência ACBrBoleto64.dll MT


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

Recommended Posts

Boa noite!

Estou enfrentando um problema de concorrência com a biblioteca ACBrBoleto64.dll MT.

Desenvolvi uma API com Asp.Net Core WebAPI utilizando a nova dll MT do ACBrLib. Segui todos os exemplos que estão na Demo. 

Porém quando faço duas requisições ao mesmo tempo está voltando o erro "String list does not allow duplicates". Segue arquivo de log (ACBrLibBoleto-20200924.log) com o erro voltando de dentro da DLL.

O Comando Boleto_IncluirTitulos está sendo chamado passando para gerar o PDF.

Esse erro só acontece quando é chamado duas requisições ao mesmo tempo. 

Segue também o arquivo ACBrLib.ini utilizado para configurar a DLL.

Alguém já passou por esse problema? 

Eu posso seguir o que está no Demo para utilizar a dll MT em um ambiente de concorrência ou tenho que alterar alguma coisa para que funcione em um ambiente de concorrência?

Muito obrigado.

ACBrLibBoleto-20200924.log ACBrLib.ini

Link to comment
Share on other sites

A não ser que esteja reaproveitando a instancia da classe não deveria haver concorrência, se você esta aproveitando da instancia com certeza absoluta vai ter concorrência.

O que mudou da lib ST para MT é que agora as instancia da classe são independentes diferentes de antes, sempre era a mesma instancia.

 

Link to comment
Share on other sites

13 horas atrás, Rafael Dias disse:

A não ser que esteja reaproveitando a instancia da classe não deveria haver concorrência, se você esta aproveitando da instancia com certeza absoluta vai ter concorrência.

O que mudou da lib ST para MT é que agora as instancia da classe são independentes diferentes de antes, sempre era a mesma instancia.

Bom dia, Rafael.

Obrigado pela resposta.

São instâncias diferentes. Cada requisição cria um objeto ACBrBoleto(Classe de alto nível do projeto) diferentes.

Código utilizado para criação: _acbrBoleto = new ACBrBoleto(caminhoACBr);

E mesmo assim, quando chamo as duas requisições ao mesmo tempo está estourando o erro no log.

Lembrando que só dá o erro quando existe chamadas simultâneas que geram PDF.

Quando é uma requisição por vez, funciona perfeitamente.

Vocês tem algum relato de alguém que utilizou a MT, em um ambiente de API, sem utilizar o lock, funcionando sem problemas em chamadas simultâneas? Pois já tentei de tudo aqui para fazer funcionar sem voltar erro de dentro da DLL(veja o log) e não estou conseguindo.

Muito obrigado.

Link to comment
Share on other sites

10 minutos atrás, Rafael Dias disse:

Me responde uma pergunta o tipo de saida que esta usando é qual, infelizmente não ta aparecendo no log será corrigido na proxima versão ?

A saída que estou utilizando é o PDF.

Porém se eu deixo com a saída padrão, não dá o erro. O erro só ocorre quando tem que gerar chamando mais de uma requisição com PDF.

Gerando o mesmo boleto em PDF com uma única requisição funciona corretamente.

Link to comment
Share on other sites

9 minutos atrás, Rafael Dias disse:

Agora o erro é que a fonte usada na impressão não existe na maquina.

Quando mando imprimi o mesmo boleto, sendo uma única requisição, ele imprime corretamente. Utilizando exatamente o mesmo boleto. Com as mesmas configurações. Exatamente tudo igual. Não dá erro nenhum de fonte.
Outro ponto, onde que altero essa fonte? Eu não identifiquei onde estou passando esse tipo de configuração.
O arquivo ACBrLib.ini está anexado acima
Segue o arquivo log comprovando que com uma única requisição funciona corretamente sem erro de fonte.

ACBrLibBoleto-20200925 (1).log

Link to comment
Share on other sites

22 horas atrás, Rafael Dias disse:

Rapaz ai eu não sei teria que tentar simular algo aqui pois é erro do gerador de relatorio

Boa tarde, Rafael!

Tudo bem?

Criei uma API simples que dá um erro no momento que você faz duas requisições ao mesmo tempo para que consiga provocar aí. O fonte encontra-se em anexo.

O arquivo "ErroAoClicarDuasVezes.png" exibe o erro que aparece na tela quando chamo a requisição duas vezes. Note que na imagem está mostrando um erro na preparação do relatório.

O arquivo "ACBrLibBoleto-20200926.log" mostra o erro que aparece no log vindo de dentro da API. 

A requição está com dados fixos de geração do boleto, ou seja, são exatamente iguais os boletos a serem gerados.

Criei os objetos todos dentro da controller para não ter dúvida sobre o compartilhamento de objetos, ou seja, cada requisição cria seu objeto de ACBrBoleto.

Para provocar o erro, estou executando a API, abrindo o browser, digitando o endereço https://localhost:5001/boletos . Dou enter, um clique no endereço e outro enter rapidão. É apresentado o erro de AV no log.

Apesar da mensagem de erro mudar desde o início do post o problema sempre foi gerar o PDF em duas requisições simultâneas. Acredito que todos os erros apresentados até agora parece ser na geração do relatório.

Qualquer dúvida estou a disposição.

Boleto.7z

Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.