none
Usuário está fechando o navegador antes do processo ser finalizado RRS feed

  • Pergunta

  • Bom dia.

    Estou com um problema grave aqui na empresa. Tenho uma aplicação que as vezes demora um pouco para executar um processo e isso faz com que os usuários impacientes cliquem no botão fechar do navegador ou algumas vezes fecham o navegador com alt + f4 e isso faz com que os brokers (usuários que me permitem conectar com o banco de dados Progress) fiquem presos no processo. Queria saber se existe alguma forma de impedir que o usuário feche o navegador ou caso isso não seja possível fazer com que o processo que estava aberto seja encerrado assim que o navegador for fechado.

    Já pesquisei no fórum e não encontrei nenhum meio que dê certo e que resolva meu problema.

    Desde já agradeço a atenção. 

    sexta-feira, 20 de fevereiro de 2015 10:39

Respostas

Todas as Respostas

  • O HTTP é um protocolo sem estado, o que significa que não há nenhuma maneira (usando HTTP) para detectar se o cliente ainda esta la ou não.

    Você poderia na interface da uma mensagem para o usuário para que ele saiba que esta sendo processado e quando tiver o retorno vc tira essa mensagem... 

    Como é uma tarefa que leva muito tempo pelo jeito, é um candidato para rodar em um background task e vc pode usar o Signalr para enviar a resposta paro o cliente (server -> client utilizando websockets). 

    Signalr: http://signalr.net/

    Frameworks para rodar backgroundtasks: http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx


    Blog Breno Queiroz – MCP

    sexta-feira, 20 de fevereiro de 2015 10:58
  • Agradeço o retorno Breno, só gostaria de tirar algumas dúvidas com você:

    Primeiro: Qual a vantagem de utilizar este background task? Hoje eu faço o seguinte: adicionei um javascript no botão que faz com que quando o usuário clicar este botão seja desabilitado e eu troco a descrição do botão para "Aguarde...". Este background task não seria, de certa forma, a mesma coisa?


    sexta-feira, 20 de fevereiro de 2015 11:25
  • Os requisitos exatos variam, mas a maioria das aplicações precisam de algum tipo de mecanismo para fazer uma operação que será executada sem bloquear a interface do usuário, e quando essa operação termina precisa notificar o usuário que foi concluído!!!

    Poderia fazer um pedido via AJAX, sim poderia mas no seu caso pareceu ser uma tarefa bem longa por isso o uso de background tasks. Evitando timeouts e pedidos esperando repostas por um longo tempo (thread travadas se vc nao estiver usando async/await para liberar os recursos)


    Blog Breno Queiroz – MCP

    sexta-feira, 20 de fevereiro de 2015 11:39