WCF - tem cheque cliente disponibilidade de serviço [duplicado]
-
22-07-2019 - |
Pergunta
Esta questão já tem uma resposta aqui:
- verificar a disponibilidade do WCF Web Service 4 respostas
Eu tenho um sistema cliente-servidor, ambos os lados escritos por mim, e eu gostaria de colocar os clientes em um estado 'offline' quando os servidor desconecta / morre, e então automaticamente trazê-los de volta 'online' quando o servidor está disponível novamente.
Para a primeira parte, eu escuto para eventos e alça de canal falha que, definindo o cliente para offline. Eu, então, começar a chamar um serviço de 'ping' no servidor (a cada 30 seg.), Que retorna apenas um bool se ele está vivo. Uma vez que ele está vivo o cliente recebe o bool e volta online.
Esta todas as obras, o problema que estou tendo é que quando o cliente chama o serviço de ping eo servidor está em baixo, nenhuma resposta é enviada (obviamente) e, eventualmente, após cerca de 2mins eu recebo um endpoint não encontrado exceção. A essa altura eu já tentou mais 3-4 pings e, portanto, têm 3-4 exceções cervejeira.
A minha pergunta é, como posso lidar com o serviço de ping mais graciosamente? Idealmente, eu gostaria de chamar periodicamente um serviço que me permite saber se é on-line, e imediatamente me permite saber se não é.
Solução
O que sobre isso:
- Se você detectar uma desconexão do servidor, digite um modo "Ping"
- no "modo de ping", você define o cliente "SendTimeout" a algo muito curto, por exemplo, algo como 2 segundos ou mais, uma vez que a sua chamada para o método Ping do serviço deverá ser respondida quase imediatamente
- Uma vez que seu "Ping" trabalhado com sucesso, você novamente recriar o proxy do cliente e definir o cliente "SendTimeout" de volta para o valor original (padrão é 1 minuto - depende do que faz sentido para você, 15 segundos, 30 segundos - qualquer que seja)
Dessa forma, se você está em "modo de Ping", você começa suas respostas (ou tempos de espera) rapidamente e você pode detectar a disponibilidade do serviço rapidamente.