Я создал приложение для измерения времени на C#, которое подключается к веб-сервису на нашем сервере, чтобы отслеживать приход и уход сотрудников. Приложение находится в системном трее и отключает пользователей, если они выключают / приостанавливают работу своих компьютеров или если они простаивают более трех часов, до которых оно отключает их во время последней активности.
Моя проблема заключается в том, что, когда пользователь возвращает свою машину из спящего состояния (которое запускает событие SystemEvents.PowerModeChanged), приложение пытается вернуть сотрудника обратно, но сетевое соединение не полностью инициализировано в это время, и Интернет - время ожидания вызова службы истекло.
Очевидным решением, пусть и хакерским, было бы установить задержку на часах, но это не обязательно решит проблему повсеместно. То, что я хочу сделать, - это своего рода "безжалостные" часы, в которых он будет ждать, пока не увидит сервер, пока он не попытается войти.
Как лучше всего определить, можно ли установить соединение с веб-службой?





Лучший способ - это попытаться установить соединение и выявить ошибки. Вы можете проверить связь с машиной, но это только скажет вам, работает ли машина и находится ли она в сети, что не обязательно отражается на том, работает ли и доступен ли веб-сервис.
Правда. Если сервер обычно не отвечает на запросы ping, это будет бесполезно.
При обработке события поместите свой код подключения в метод, который будет выполняться в цикле до успеха, выявляя ошибки и повторяя попытки.
Даже задержка не была бы идеальной, поскольку в зависимости от отдельных систем и других запущенных приложений может потребоваться разное время для восстановления сетевого соединения.
если проблема заключается в задержке восстановления сетевой службы, решением является пинг; это как вызвать в дверной звонок, чтобы узнать, дома ли кто-нибудь
если ping успешен, попробуйте вызвать веб-службу, соответствующим образом отлавливая исключения (я думаю, что SocketException и SoapException могут возникать в зависимости от готовности / скорости отклика)
Реализуйте очередь, в которой вы публикуете сообщения, и поток периодически пытается сбросить очередь в памяти в веб-службу.
Пинг можно отключить, хотя порт веб-службы открыт. Я бы не стал использовать этот метод ...
Пинг даже не обязательно вам этого скажет.