2008-09-25 6 views
2

J'ai créé une application de timeclock en C# qui se connecte à un service web sur notre serveur afin de synchroniser les entrées/sorties des employés. L'application réside dans la barre d'état système et réveille les utilisateurs s'ils arrêtent/suspendent leurs machines ou s'ils sont inutilisés pendant plus de trois heures auxquelles ils les synchronisent au moment de la dernière activité. Mon problème est que lorsqu'un utilisateur remet sa machine de l'état de veille (qui déclenche l'événement SystemEvents.PowerModeChanged), l'application tente de réintégrer le salarié mais la connexion réseau n'est pas entièrement initialisée à ce moment-là. l'heure et l'appel du service Web expire.La meilleure façon de vérifier si le serveur est joignable dans .NET?

Une solution évidente, bien que ce soit un hack, serait de mettre un retard sur l'horloge, mais cela ne résoudrait pas nécessairement le problème à travers le tableau. Ce que je cherche à faire est une sorte d'horloge "implacable" dans laquelle il attendra jusqu'à ce qu'il puisse voir le serveur jusqu'à ce qu'il essaye réellement d'entrer en horloge.

Quelle est la meilleure méthode pour déterminer si une connexion à un web le service peut être fait?

Répondre

3

Le meilleur moyen sera d'essayer de faire la connexion et d'attraper les erreurs. Vous pouvez exécuter une commande ping sur la machine, mais cela ne vous indique que si la machine est en cours d'exécution et sur le réseau, ce qui ne reflète pas nécessairement si le service Web est en cours d'exécution et disponible.

+0

Un ping ne veut pas nécessairement dire autant. –

+0

True. Si le serveur ne répond normalement pas aux requêtes ping, ce serait inutile. –

0

Lors de la gestion de l'événement, placez votre code de connexion dans une méthode qui passera en boucle jusqu'au succès, en détectant les erreurs et en réessayant.

Même un retard ne serait pas parfait car, en fonction des systèmes individuels et d'autres applications en cours d'exécution, la connexion réseau peut prendre plusieurs fois pour être rétablie.

0

Si le problème est dû à une latence lors du rétablissement du service réseau, Ping est la solution; il est comme sonner à la porte pour voir si quelqu'un est à la maison

si ping réussit, essayez d'appeler le service Web, la capture des exceptions correctement (je pense que les deux SocketException et SoapException peuvent se produire en fonction de préparation/réactivité)

0

Mettre en œuvre une file d'attente où vous publiez des messages et avez un thread essayer périodiquement de vider la file d'attente en mémoire au service Web.

0

Le ping peut être désactivé bien que le port de service Web soit ouvert. Je ne voudrais pas utiliser cette méthode ...

Questions connexes