Gilberto Evangelista 1 Posted September 24, 2020 Report Share Posted September 24, 2020 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 post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 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. Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 25, 2020 Author Report Share Posted September 25, 2020 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 post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 Sim temos casos sim que usam sem o lock isso é algo pontual ai, este erro ali pelo que li tem haver com a parte de leitura do ini, parece que tem algo duplicado no ini Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 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 ? Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 25, 2020 Author Report Share Posted September 25, 2020 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 post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 No caso o tipo de saida que esta utilziando é o BoletoTpSaida.PDF ? Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 25, 2020 Author Report Share Posted September 25, 2020 2 minutos atrás, Rafael Dias disse: No caso o tipo de saida que esta utilziando é o BoletoTpSaida.PDF ? Sim Link to post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 Poderia testa com esta versão. ACBrBoleto.rar Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 25, 2020 Author Report Share Posted September 25, 2020 27 minutos atrás, Rafael Dias disse: Poderia testa com esta versão. ACBrBoleto.rar 2 MB · 2 downloads Opa, obrigado. Vamos testar. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 25, 2020 Author Report Share Posted September 25, 2020 37 minutos atrás, Rafael Dias disse: Poderia testa com esta versão. ACBrBoleto.rar 2 MB · 2 downloads Desculpa Rafael com essa DLL o erro mudou, segue o log gerado com o erro. ACBrLibBoleto-20200925.log Link to post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 Agora o erro é que a fonte usada na impressão não existe na maquina. Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 25, 2020 Author Report Share Posted September 25, 2020 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 post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 Não tem como mudar a fonte sem alterar o componente de impressão inteiro. Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 25, 2020 Author Report Share Posted September 25, 2020 9 minutos atrás, Rafael Dias disse: Não tem como mudar a fonte sem alterar o componente de impressão inteiro. Porém funciona com uma requisição, por que quando é mais de uma requisição ao mesmo tempo estoura esse erro de fonte? Link to post Share on other sites
Rafael Dias 1,215 Posted September 25, 2020 Report Share Posted September 25, 2020 Rapaz ai eu não sei teria que tentar simular algo aqui pois é erro do gerador de relatorio Rafael Dias Ajude o Projeto ACBr crescer - Assine o SAC Desenvolvedor ACBrLib. Link to post Share on other sites
Gilberto Evangelista 1 Posted September 26, 2020 Author Report Share Posted September 26, 2020 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 post Share on other sites
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now