2008-09-25 3 views
2

Я создал приложение timeclock в C#, которое подключается к веб-службе на нашем сервере, чтобы синхронизировать работу сотрудников. Приложение находится в системном лотке и отключает пользователей, если они закрывают/приостанавливают работу своих компьютеров или простаивают в течение более трех часов, к которым он синхронизирует их во время последнего действия.Лучший способ проверить, доступен ли сервер в .NET?

Проблема возникает в том, что когда пользователь выводит свою машину из состояния сна (что вызывает событие SystemEvents.PowerModeChanged), приложение пытается вернуть обратно сотрудника обратно, но сетевое соединение не полностью инициализировано на этом времени и времени обслуживания веб-службы.

Очевидным решением, хотя это и был взломан, было бы поставить задержку на часы, но это не обязательно устранит проблему по всем направлениям. То, что я собираюсь сделать, - это своего рода «неустанные» часы, в которых он будет ждать, пока он не увидит сервер, пока он не попытается выполнить синхронизацию.

Каков наилучший способ определить, связано ли подключение к сети услуга может быть произведена?

ответ

3

Лучший способ - попытаться установить соединение и поймать ошибки. Вы можете пинговать машину, но это только скажет вам, работает ли машина и в сети, что не обязательно отражается на том, работает ли webservice и доступен ли он.

+0

Пинг обычно даже не скажет вам об этом. – 2008-09-25 18:33:12

0

При обработке события введите код соединения в метод, который будет проходить до тех пор, пока не будет успешным, поймать ошибки и повторить попытку.

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

0

если проблема связана с задержкой при восстановлении сетевого сервиса, Ping - это решение; это как звонит в дверь, чтобы увидеть, если кто-то дом

если пинг успешно, то попробуйте вызов веб-службу, ловя исключения надлежащим образом (я думаю, что оба SocketException и SoapException могут происходить в зависимости от готовности/отзывчивость)

0

Реализовать очередь, в которой вы отправляете сообщения, и поток периодически пытается очистить очередь в памяти в веб-службе.

0

Ping может быть отключен, хотя порт веб-сервиса открыт. Я бы не использовал этот метод ...

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