WCF: verifica la disponibilità del servizio da parte del cliente [duplicato]
-
22-07-2019 - |
Domanda
Questa domanda ha già una risposta qui:
Ho un sistema client-server, scritto da entrambe le parti, e vorrei mettere i client in uno stato 'offline' quando il server si disconnette / muore, e quindi riportarli automaticamente 'online' quando il server è di nuovo disponibile.
Per la prima parte, ascolto gli eventi con errore del canale e lo gestisco impostando il client su offline. Comincio quindi a chiamare un servizio "ping" sul server (ogni 30 secondi) che restituisce un bool se è attivo. Una volta che è vivo, il client ottiene il bool e torna online.
Tutto funziona, il problema che sto riscontrando è che quando il client chiama il servizio ping e il server è inattivo, nessuna risposta viene inviata (ovviamente) e alla fine, dopo circa 2 minuti ottengo un'eccezione non trovata nell'endpoint. A questo punto ho già provato altri 3-4 ping e quindi ho fatto 3-4 eccezioni.
La mia domanda è: come posso gestire il servizio ping in modo più elegante? Idealmente, vorrei chiamare periodicamente un servizio che mi fa sapere se è online e mi fa sapere immediatamente se non lo è.
Soluzione
Che dire di questo:
- se rilevi una disconnessione del server, inserisci un " Ping " modalità
- nella modalità " ping " ;, imposti il ??client " sendTimeout " a qualcosa di molto breve, ad es. circa 2 secondi circa, poiché la tua chiamata al metodo Ping del servizio dovrebbe ricevere una risposta quasi immediatamente
- una volta che " Ping " ha funzionato correttamente, ricrea nuovamente il proxy client e imposta il "sendTimeout" del client torna al valore originale (il valore predefinito è 1 minuto - dipende da cosa ha senso per te, 15 secondi, 30 secondi - qualunque cosa)
In questo modo, se sei in " modalità Ping " ;, ottieni rapidamente le tue risposte (o timeout) e puoi rilevare rapidamente la disponibilità del servizio.