WCF - haben Client-Check für die Serviceverfügbarkeit [Duplicate]
-
22-07-2019 - |
Frage
Diese Frage bereits eine Antwort hier:
Ich habe eine Client-Server-System, beide Seiten von mir geschrieben, und ich möchte die Kunden in einem ‚offline‘ Zustand versetzen, wenn der Server die Verbindung trennt / stirbt, und sie dann automatisch ‚online‘ bringen, wenn der Server ist wieder verfügbar.
Für den ersten Teil, ich höre für Kanal bemängelt Ereignisse und handhaben, dass durch den Client offline zu setzen. Ich habe dann beginnen, eine ‚Ping‘ Dienst auf dem Server aufrufen (alle 30 Sek.), Die nur einen Bool zurückgibt, wenn es lebendig ist. Sobald es lebendig ist bekommt der Kunde die Bool und Online-Schalter zurück.
Dies alles funktioniert, das Problem, das ich habe ist, dass, wenn der Client den Ping-Dienst ruft und der Server ausgefallen ist, wird keine Antwort (natürlich) gesendet und schließlich, nach etwa 2 Minuten ich einen Endpunkt bekomme Ausnahme nicht gefunden. Zu dieser Zeit habe ich versucht, bereits 3-4 mehr Pings und haben daher 3-4 Ausnahmen brauen.
Meine Frage ist, wie kann ich mit dem Ping-Service anmutiger umgehen? Im Idealfall würde Ich mag in regelmäßigen Abständen einen Dienst nennen, die mich wissen lässt, wenn er online ist, und lässt mich sofort wissen, wenn es nicht ist.
Lösung
Was folgt aus:
- , wenn Sie einen Server trennen erkennen, geben Sie einen "Ping" Modus
- in dem „Ping-Modus“, stellen Sie die Kunden „Sendtimeout“ zu etwas sehr kurz, z.B. so etwas wie 2 Sekunden oder so, da Ihr Anruf auf den Ping-Methode des Service sollte fast sofort beantwortet werden
- , sobald Ihr „Ping“ erfolgreich gearbeitet, Sie wieder die Client-Proxy neu erstellen und die Kunden „Sendtimeout“ wieder auf den ursprünglichen Wert (Standard ist 1 Minute - hängt davon ab, was Sinn macht für Sie 15 Sekunden, 30 Sekunden - was auch immer)
So, wenn Sie in „Ping-Modus“ sind, erhalten Sie Ihre Antworten (oder Timeouts) schnell und Sie können die Verfügbarkeit des Dienstes schnell erkennen.