WCF - клиент проверяет наличие услуг

У меня есть клиент-серверная система, написанная мной обе стороны, и я хотел бы поставить клиентов в состояние "офлайн", когда сервер отключается/умирает, а затем автоматически возвращает их "онлайн", когда сервер снова доступен.

В первой части я слушаю события с ошибками канала и обрабатываю их, установив клиент в автономный режим. Затем я запускаю вызов службы "ping" на сервере (каждые 30 секунд), который возвращает bool, если он жив. Как только он жив, клиент получает bool и переключается обратно в Интернете.

Все это работает, проблема заключается в том, что когда клиент вызывает службу ping, а сервер не работает, ответ не отправляется (очевидно), и в итоге после примерно 2 минут я получаю исключение, не найденное в конечной точке. К этому времени я уже пробовал еще 3-4 пинга и, следовательно, имел 3-4 исключения.

Мой вопрос: как я могу более эффективно обрабатывать пинг-сервис? В идеале я хотел бы периодически называть услугу, которая позволяет мне знать, если она в сети, и мгновенно позволяет мне знать, если это не так.

Спасибо, Будет ли

Ответ 1

Как насчет этого:

  • если вы обнаружите отключение сервера, введите режим "Пинг"
  • в режиме "ping", вы установите для клиента "sendTimeout" что-то очень короткое, например. что-то вроде 2 секунд или около того, так как ваш вызов метода Ping службы должен быть дан почти сразу.
  • Как только ваш "Ping" работал успешно, вы снова заново создаете клиентский прокси и установите для клиента "sendTimeout" обратно исходное значение (по умолчанию 1 минута - зависит от того, что имеет смысл для вас, 15 секунд, 30 секунд - независимо)

Таким образом, если вы находитесь в режиме "Пинг", вы получаете свои ответы (или таймауты) быстро, и вы можете быстро обнаружить доступность службы.

Марк