Ir para conteúdo
  • Cadastre-se

dev botao

Problema de Concorrência ACBrBoleto64.dll MT


  • Este tópico foi criado há 1279 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

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

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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