Usuário com melhor resposta
Usuário está fechando o navegador antes do processo ser finalizado

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.
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
- Sugerido como Resposta Eduardo.RomeroModerator segunda-feira, 23 de fevereiro de 2015 12:24
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 23 de fevereiro de 2015 13:21
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
- Sugerido como Resposta Eduardo.RomeroModerator segunda-feira, 23 de fevereiro de 2015 12:24
- Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 23 de fevereiro de 2015 13:21
-
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?
-
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)