2010-12-06 20 views
1

Ma question: Est-ce qu'un HttpWebResponse.StatusCode détecte les erreurs Asp.Net? Principalement un écran jaune de la mort? Je travaille sur une simple application de console C# qui testera les serveurs et les services pour s'assurer qu'ils fonctionnent toujours correctement. Je suppose que les HttpStatusCodes sont énumérés avec OK, Moved, InteralServerError, etc ... que je pourrais simplement faire ce qui suit.HttpWebResponse.StatusCode ne retient pas 500 erreurs

WebRequest request = WebRequest.Create(url); 
request.Timeout = 10000; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

if (response == null || response.StatusCode != HttpStatusCode.OK) 
{ 
    // SERVER IS OK 
    return false; 
} 
else 
{ 
    // SERVER HAS SOME PROBLEMS 
    return true; 
} 

J'ai découvert ce matin que cela ne fonctionne pas. Une application ASP.Net s'est écrasée en affichant un écran jaune de la mort et mon application ne semblait pas déranger parce que le response.StatusCode égalait HttpStatusCode.OK.

Qu'est-ce qui me manque?

Merci // lance

Mise à jour Merci à Jon cela semble fonctionner.

HttpWebResponse response; 
try 
{ 
    response = (HttpWebResponse)request.GetResponse(); 
} 
catch (WebException webexp) 
{ 
    response = (HttpWebResponse)webexp.Response; 
} 

Répondre

4

GetResponse lancera une WebException pour les erreurs - mais vous pouvez attraper le WebException, utilisez WebException.Response pour obtenir la réponse, puis obtenir le code d'état de cela. Pour autant que je sache, GetResponse renvoie null, donc vous pouvez supprimer ce test de votre code.

De plus, plutôt que d'avoir si/blocs d'autre pour revenir vrai/faux, il est simple il suffit de retourner le résultat d'une évaluation d'une expression, par exemple:

return response.StatusCode == HttpStatusCode.OK; 

(Pour être honnête, vous pourriez probablement revenir false si WebException est levée ...)