Tester si un site Web est actif à partir d’une application C #

Je cherche le meilleur moyen de tester si un site Web est vivant à partir d’une application C #.

Contexte

Mon application se compose d’une interface utilisateur Winforms , d’un service backend WCF et d’un site Web pour publier du contenu sur l’interface utilisateur et d’autres consommateurs. Pour éviter que l’UI ne démarre et ne fonctionne pas correctement en raison de l’absence d’un service ou d’un site Web WCF en panne, j’ai ajouté une vérification de démarrage de l’application pour s’assurer que tout est vivant.

L’application est écrite en C #, .NET 3.5, Visual Studio 2008

Solution actuelle

Actuellement, je fais une demande Web sur une page de test sur le site Web qui testera le site Web, puis affichera un résultat.

WebRequest request = WebRequest.Create("http://localhost/myContentSite/test.aspx"); WebResponse response = request.GetResponse(); 

Je présume que s’il n’y a pas d’exception pendant cet appel, tout va bien et l’interface utilisateur peut démarrer.

Question

Est-ce la manière la plus simple, la plus correcte ou y a-t-il un autre appel sournois que je ne connais pas en C # ou une meilleure façon de le faire.

 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response == null || response.StatusCode != HttpStatusCode.OK) 

Lors de l’utilisation de WebResponse, assurez-vous de fermer le stream de réponse, c’est-à-dire (.close), sinon la machine serait suspendue après une exécution répétée. Par exemple

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sURL); HttpWebResponse response = (HttpWebResponse)req.GetResponse(); // your code here response.Close(); 

du projet NDiagnostics sur CodePlex …

 public override bool WebSiteIsAvailable(ssortingng Url) { ssortingng Message = ssortingng.Empty; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url); // Set the credentials to the current user account request.Credentials = System.Net.CredentialCache.DefaultCredentials; request.Method = "GET"; try { using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { // Do nothing; we're only testing to see if we can get the response } } catch (WebException ex) { Message += ((Message.Length > 0) ? "\n" : "") + ex.Message; } return (Message.Length == 0); } 

En supposant que le service WCF et le site Web vivent dans la même application Web, vous pouvez utiliser un service Web «Status» qui renvoie le statut de l’application. Vous voulez probablement faire certaines des choses suivantes:

  • Vérifiez que la firebase database est opérationnelle (bonne chaîne de connexion, service en place, etc.)
  • Tester que le site fonctionne (comment dépend exactement du site)
  • Testez le fonctionnement de WCF (cela dépend exactement de votre implémentation)
  • Bonus supplémentaire: vous pouvez retourner des informations de version sur le service si vous avez besoin de prendre en charge différentes versions à l’avenir.

Ensuite, vous créez un client sur l’application Win.Forms pour le WebService. Si le WS ne répond pas (c’est-à-dire que vous obtenez des exceptions lors de l’appel), le site Web est en panne (comme une “erreur générale”).
Si le WS répond, vous pouvez parsingr le résultat et vous assurer que tout fonctionne, ou si quelque chose est cassé, renvoyer plus d’informations.

Nous pouvons aujourd’hui mettre à jour les réponses en utilisant HttpClient () :

 HttpClient Client = new HttpClient(); var result = await Client.GetAsync("https://stackoverflow.com"); int StatusCode = (int)result.StatusCode; 

Vous voudrez vérifier le code d’état pour OK (statut 200).

Solution de: comment vérifier si un site Web est en ligne en C #?

 var ping = new System.Net.NetworkInformation.Ping(); var result = ping.Send("https://www.stackoverflow.com"); if (result.Status != System.Net.NetworkInformation.IPStatus.Success) return;