2009-08-05 2 views
11

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

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

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

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

Спасибо, Will

ответ

12

Что об этом:

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

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

Marc

+0

Спасибо Marc, отличная идея, это то, что я сделал. Я совершенно забыл, что можно редактировать тайм-ауты перехвата на лету, как это. – WillH

+0

Как обнаружить сервер отключен? –

+0

@Ashutosh: если сервер отключен, ваш вызов завершится с одной из нескольких возможных ошибок («не найден» или «тайм-аут» или othesr) –

Смежные вопросы