2009-08-05 12 views
11

J'ai un système client-serveur, écrit par mes deux côtés, et je voudrais mettre les clients dans un état 'déconnecté' quand le serveur se déconnecte/meurt, puis apporte automatiquement leur retour en ligne lorsque le serveur est à nouveau disponible.WCF - vérification du client pour la disponibilité du service

Pour la première partie, j'écoute les événements de défaillance de canal et gère cela en mettant le client hors ligne. Je commence alors à appeler un service 'ping' sur le serveur (toutes les 30 secondes) qui retourne juste un booléen s'il est vivant. Une fois qu'il est vivant, le client obtient le bool et revient en ligne. Tout cela fonctionne, le problème que j'ai est que lorsque le client appelle le service ping et le serveur est en panne, aucune réponse n'est envoyée (évidemment) et finalement, après environ 2 minutes, je reçois une exception non trouvée. A ce moment j'ai déjà essayé 3-4 pings de plus et j'ai donc 3-4 exceptions.

Ma question est, comment puis-je traiter avec le service de ping plus gracieusement? Idéalement, je voudrais appeler régulièrement un service qui me permet de savoir si elle est en ligne, et me fait savoir instantanément si ce n'est pas le cas.

Merci, Will

Répondre

12

Qu'en est-ce:

  • si vous détectez une déconnexion du serveur, entrez un "Ping" Mode
  • dans le mode "ping", vous définissez du client " sendTimeout "à quelque chose de très court, par exemple Quelque chose comme 2 secondes ou plus, puisque votre appel à la méthode Ping du service doit être répondu presque immédiatement
  • une fois que votre "Ping" a fonctionné avec succès, vous recréer à nouveau le proxy client et réglez "sendTimeout" du client à l'original valeur (la valeur par défaut est 1 minute - dépend de ce qui est logique pour vous, 15 secondes, 30 secondes - peu importe)

De cette façon, si vous êtes en mode "Ping", vous obtenez vos réponses (ou les délais) rapidement et vous pouvez détecter la disponibilité du service rapidement.

Marc

+0

Merci Marc, bonne idée, c'est ce que j'ai fait. J'avais complètement oublié que l'on peut modifier les délais d'attente de liaison à la volée comme ça. – WillH

+0

Comment détecter le serveur est déconnecté? –

+0

@Ashutosh: si le serveur est déconnecté, votre appel échouera avec l'une des erreurs possibles ("non trouvé" ou "timeout" ou autre) –

Questions connexes