У меня есть проект, в котором я нажимаю кучу настраиваемых счетчиков производительности Windows на нескольких серверах и агрегирую их в базу данных. Если сервер не работает, я хочу пропустить его и просто продолжить свой день.Быстрый способ проверить, доступен ли сервер по сети в C#
В настоящее время я проверяю, жив ли сервер, делая DirectoryInfo
на общем ресурсе, который я должен посмотреть позже в этом процессе, а затем проверить свойство .Exists
.Это мой текущий фрагмент кода для испытания:
DirectoryInfo di = new DirectoryInfo(machine.Share_Path);
if (!di.Exists)
{
log.Warn("Could not access " + machine.Name + "! Maybe its down?");
continue; // Skips to the next server in my loop where this snippet exists.
}
Это работает, но его довольно медленно. В среднем бит занимает 68 секунд, а бит di.Exists заканчивается, и я в идеале должен знать через секунду, доступен ли сервер. Pinging также не является вариантом, поскольку сервер может быть pingable, но не «жить» в нашей среде.
Я все еще немного свежий для мира .NET, поэтому я открыт для любых советов, которые могут предложить люди.
Заранее спасибо.
-Weegee
Нужно ли 68 секунд, когда сервер находится там, когда сервера нет, или и то, и другое? –
Когда сервера нет. Когда сервер там, он занимает меньше секунды. – Weegee
Как насчет запуска проверки в отдельном рабочем потоке и просто позволяя ему взять, сколько нужно времени? – Dolphin