Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Pessoal,

 

Eu fiz um serviço do tipo ISAPI em Delphi 7 rodando sob IIS 6/W2003 para atender requisições na nossa empresa (intranet) para visualização da DANFE em PDF. O usuário faz uma pesquisa na nossa base de dados de XMS's recebidos de fornecedores e a aplicação devolve o PDF. O serviço é bem simples, recebe o IDNFE e devolve um stream do tipo "application/pdf"  usando a unit ACBrNFeDANFERave para gerar o PDF.

 

Tudo funciona bem por um tempo. Depois de um número x de acessos que não determinei, o componente devolve o conteúdo de uma consulta anterior mesmo embora eu tenha passado o XML novo. Gastei um tempão tentando descobrir o que poderia gerar a falha e tomei alguns cuidados na hora do tratamento do request http:

 

1) Criei uma CriticalSection para evitar dois ou mais requests concorrentes pois a unit ACBrNFeDANFERave poderia não ter sido projetada para ser reentrante. Isso ampliou o tempo de estabilidade da rotina mas mesmo assim voltou a acontecer no transcorrer do tempo

 

2) Mudei também o programa para, ao invés de devolver o stream como response, passei a gravar o PDF numa área do site e devolver a URL para o PDF gerado tentando evitar alguma interferência de cache do IIS mas mesmo assim o problema persistia.

 

3) Por último, descobri um fato curioso. Se o componente TACBrNFeDANFERave fosse criado dinamicamente ao invés de ficar fixo  no datamodule, o problema ficava aparentemente contornado. Passei então a criar o componente TACBrNFeDANFERave dinamicamente a cada request mas isso gerou um grande overhead e o tempo de resposta de cada requisição ficou meio alto pois  tive que enfileirar via CriticalSection para evitar reentrância na unit  ACBrNFeDANFERave.

 

4) Por fim adotei uma solução híbrida, deixei o componente  TACBrNFeDANFERave estático por um número fixo de requisições (adotei 100) e quando este valor fosse atingido, o programa destroía e recriava o componente. O fato é que mesmo assim o programa continua a falhar com o tempo devolvendo o o conteúdo do PDF de uma consulta anterior mesmo sendo passado o XML novo com outro IDNFE.

 

Pergunta, alguém passou por um problema parecido e saberia dar uma dica para solução do problema.

 

Antecipo agradecimentos,

 

Dailton Menezes

 

  • Este tópico foi criado há 4655 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.

The popup will be closed in 10 segundos...