Ich habe ein Projekt, wo ich eine Reihe von benutzerdefinierten Windows-Leistungsindikatoren auf mehreren Servern treffen und sie in einer Datenbank zusammenfassen. Wenn ein Server ausgefallen ist, möchte ich ihn überspringen und einfach mit meinem Tag fortfahren.Schnelle Möglichkeit zu überprüfen, ob ein Server über das Netzwerk in C# verfügbar ist
Momentan überprüfe ich, ob ein Server live ist, indem ich eine DirectoryInfo
auf einer Freigabe mache, die ich später im Prozess sowieso ansehen muss, und dann die .Exists
Eigenschaft überprüfen. Dies ist mein aktueller Codeausschnitt für Testen:
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.
}
Das funktioniert, aber es ist ziemlich langsam. Es dauert durchschnittlich 68 Sekunden, bis das Bit "ex.Exists" seine Arbeit beendet hat, und ich muss idealerweise innerhalb einer Sekunde wissen, ob ein Server erreichbar ist oder nicht. Das Pingen ist auch keine Option, da ein Server zwar pingbar sein kann, aber in unserer Umgebung nicht "live" ist.
Ich bin immer noch ein bisschen frisch in der .NET-Welt, also bin ich offen für jede Beratung, die Leute anbieten können.
Vielen Dank im Voraus.
-Weegee
dauert es 68 Sekunden, wenn der Server da ist, wenn der Server nicht da ist, oder beides? –
Wenn der Server nicht da ist. Wenn der Server da ist, dauert es weniger als eine Sekunde. – Weegee
Wie wäre es, den Check in einem separaten Worker-Thread auszuführen und ihn einfach so lange dauern zu lassen? – Dolphin