2010-08-27 9 views
4

Je construis une application de surveillance pour surveiller en permanence tous les aspects de mon système. J'espérais utiliser la fonction Ping() pour déterminer si le serveur est mais le MSDN documentation lui-même dit qu'il n'est pas la meilleure façon:Comment vérifier si le serveur Web est en panne? (C#)

Un succès Ping indique seulement que l'hôte distant peut être atteint sur la réseau; la présence de services de niveau supérieur (tels qu'un serveur Web) sur l'hôte distant n'est pas garantie.

Y a-t-il d'autres façons de faire mieux?

Répondre

5

Vous aurez besoin de régler sur une page/url que vous souhaitez tester, soit celle qui existe déjà ou celle que vous créez dans le but spécifique de vérifier la disponibilité des serveurs.

Une fois par [période], vous pouvez envoyer une requête à cette URL et examiner la réponse pour déterminer si elle contient les valeurs attendues, telles que le contenu d'une page si vous avez demandé mysite.com/default.aspx. La meilleure chose à faire est de consacrer un appel de service url/page/web au "ping" car il garantit qu'il ne soit pas cassé si le contenu de la page arbitraire que vous vérifiez est changé sans que vous soyez averti.

Une chose que je ne recommande contre faire est d'avoir cette une méthode ping essai tout, y compris la connectivité de votre base de données, 3ème partie la disponibilité des services Web, l'espace disque, etc ... Si vous voulez faire cela, avoir plusieurs méthodes que vous pouvez appeler afin que vous puissiez voir en un coup d'œil ce qui cause le problème.

+0

Ma pratique habituelle consiste à créer une page d'état (réservée uniquement à la visibilité interne) qui extrait un document XML décrivant l'état des sous-composants - fournit à la fois un port d'appel unique et des informations système détaillées. – annakata

+0

bonne idée. Merci! –

2

J'expose habituellement une méthode de Ping Web sur mon serveur, qui parfois fait aussi quelques tests de base du système (le cas échéant). Ensuite, il s'agit juste d'un appel Web à votre méthode Ping et vous connaissez l'état de votre système.

3

Créez simplement un gestionnaire (ou une page) pour votre site qui renvoie des informations sur votre système au format xml, json ou tout autre format, par ex.

database: ok 
service x: ok 

Ensuite, utilisez WebClient pour récupérer ces informations

var client = new WebClient(); 
string response = client.DownloadString("http://mydomain.com/state.ashx"); 
// parse information 
+0

Fonctionne bien si 'Ping' a été désactivé sur le serveur web que vous essayez d'atteindre! –

1

Ou vous pouvez faire une belle connexion Socket au port IIS (par défaut 80). Envoyez une chaîne comme "PING \ r \ n" et voyez ce que vous obtenez en retour.

Vous obtiendrez normalement un msg "HTTP/1.1 400 Bad Request ...". De cette façon, vous savez que c'est opérationnel.

Si vous ne parvenez pas à obtenir une connexion, le serveur Web est soit en panne, soit quelque chose se bloque (pare-feu/paramètres du routeur, etc.).

Questions connexes