WCF - заставить клиента проверить доступность сервиса [дубликат]

StackOverflow https://stackoverflow.com/questions/1234427

  •  22-07-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

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

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

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top