WCF - клиент проверяет наличие услуг
У меня есть клиент-серверная система, написанная мной обе стороны, и я хотел бы поставить клиентов в состояние "офлайн", когда сервер отключается/умирает, а затем автоматически возвращает их "онлайн", когда сервер снова доступен.
В первой части я слушаю события с ошибками канала и обрабатываю их, установив клиент в автономный режим. Затем я запускаю вызов службы "ping" на сервере (каждые 30 секунд), который возвращает bool, если он жив. Как только он жив, клиент получает bool и переключается обратно в Интернете.
Все это работает, проблема заключается в том, что когда клиент вызывает службу ping, а сервер не работает, ответ не отправляется (очевидно), и в итоге после примерно 2 минут я получаю исключение, не найденное в конечной точке. К этому времени я уже пробовал еще 3-4 пинга и, следовательно, имел 3-4 исключения.
Мой вопрос: как я могу более эффективно обрабатывать пинг-сервис? В идеале я хотел бы периодически называть услугу, которая позволяет мне знать, если она в сети, и мгновенно позволяет мне знать, если это не так.
Спасибо,
Будет ли
Ответы
Ответ 1
Как насчет этого:
- если вы обнаружите отключение сервера, введите режим "Пинг"
- в режиме "ping", вы установите для клиента "sendTimeout" что-то очень короткое, например. что-то вроде 2 секунд или около того, так как ваш вызов метода Ping службы должен быть дан почти сразу.
- Как только ваш "Ping" работал успешно, вы снова заново создаете клиентский прокси и установите для клиента "sendTimeout" обратно исходное значение (по умолчанию 1 минута - зависит от того, что имеет смысл для вас, 15 секунд, 30 секунд - независимо)
Таким образом, если вы находитесь в режиме "Пинг", вы получаете свои ответы (или таймауты) быстро, и вы можете быстро обнаружить доступность службы.
Марк