Question

Je recherche le meilleur moyen de vérifier si un site Web est actif à partir d'une application C #.

Arrière-plan

Mon application consiste en une interface utilisateur Winforms , un service WCF back-end et un site Web permettant de publier du contenu sur l'interface utilisateur et les autres consommateurs. Pour éviter que l’interface utilisateur ne démarre et ne fonctionne pas correctement en raison d’un service ou d’un site Web WCF manquant, j’ai ajouté une vérification de démarrage d’application afin de s’assurer que tout est en vie.

L'application est en cours d'écriture en C #, .NET 3.5, Visual Studio 2008

Solution actuelle

Je suis actuellement en train de soumettre une requête Web à une page de test du 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 suppose que s'il n'y a pas d'exception émise pendant cet appel, tout va bien et l'interface utilisateur peut démarrer.

Question

S'agit-il de la manière la plus simple et correcte ou existe-t-il un autre appel sournois que je ne connais pas en C # ou une meilleure façon de le faire?

Était-ce utile?

La solution

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

Autres conseils

Lorsque vous utilisez WebResponse, assurez-vous de fermer le flux de réponses, autrement dit (.close), sinon la machine serait bloquée après une exécution répétée. P.ex.

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(string Url)
{
  string Message = string.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 soient en direct dans la même application Web, vous pouvez utiliser l'option " Statut " WebService qui renvoie le statut de l'application. Vous souhaitez probablement effectuer certaines des opérations suivantes:

  • Vérifiez que la base de données est opérationnelle et fonctionne correctement (chaîne de connexion correcte, service activé, etc.)
  • Testez le fonctionnement du site Web (son fonctionnement dépend exactement du site Web)
  • Testez le fonctionnement de WCF (en fonction de votre implémentation)
  • Bonus supplémentaire: vous pouvez renvoyer des informations de version sur le service si vous souhaitez prendre en charge différentes versions à l'avenir.

Vous créez ensuite un client sur l'application Win.Forms pour le WebService. Si le WS ne répond pas (c'est-à-dire que vous obtenez une exception lors de l'appel), le site Web est en panne (comme une "erreur générale").
Si le WS répond, vous pouvez analyser 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 à l'aide de HttpClient () :

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

Vous souhaitez vérifier le code d'état pour OK (état 200).

Solution from: 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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top