2010-06-21 24 views
1

Notre Situation:Comment détecter que le démarrage de l'application a échoué?

Nous avons plusieurs serveurs Web derrière un loabalancer (Astaro Security Gateway). Sur les serveurs Web, nous exécutons une application asp.net et nous avons des pages d'erreurs personnalisées configurées pour les codes d'état 404 et 500.

Maintenant, lorsque l'application ne démarre chaque demande est redirigé vers le ErrorPage en envoyant le code d'état 302 et le ErrorPage lui-même envoie alors un 500.

Le loadbalancer envoie une requête HEAD à nos serveurs web toutes les 15 secondes pour voir si c'est encore vivant et si oui, il vérifie le premier code d'état html. Donc, il ne voit que le 302. Chaque code inférieur à 500 est traité comme le serveur est opérationnel.

Question:

Comment pouvons-nous faire notre travail de loadbalancing si l'application n'a pas pu démarrer?

Edit:

Par application n'a pas pu démarrer, je veux dire que lors du démarrage, il y avait des erreurs. Certaines parties essentielles n'ont pas pu être initialisées et chaque page ne peut donc pas être exécutée.

+0

Que voulez-vous dire "démarrage de l'application a échoué"? vous l'arrêtez par vous-même, ou avez-vous d'autres erreurs? car l'application est démarrée même s'il a des erreurs, et s'arrête quand elle trouve le fichier app_offline.htm, ou si vous arrêtez le pool. – Aristos

Répondre

1

deux façons:

Dans votre web.config sur le mode customErrors régler le redirectMode à ResponseRewrite - cela supprime la redirection 302 du serveur vers la page d'erreur - ce qui a aussi la coïncidence heureuse qui utilise peut facilement voir ce que la page d'origine qu'ils ont demandé était, et peut réessayer avec un F5 si cela est susceptible de résoudre le problème.

Si vous vous connectez à l'événement ApplicationError, assurez-vous que plutôt que de rediriger vers vos pages d'erreur, vous utilisez plutôt Server.Transfer.

je suit dans un de mes web.configs:

<customErrors mode="On" 
       defaultRedirect="ErrorHandler.aspx" 
       redirectMode="ResponseRewrite"> 

Puis, dans ma page ErrorHandler Je vérifie pour la dernière erreur du serveur, et configurer ceux-ci:

var serverError = Server.GetLastError(); 

    var error = serverError as HttpException; 

    int errorCode; 
    string errorMessage; 

    if (null != error) 
    { 
    errorCode = error.GetHttpCode(); 

    errorMessage = error.GetHtmlErrorMessage(); 
    } 
    else 
    { 
    errorCode = 404; 
    errorMessage = "Page not found"; 
    } 

    Response.StatusCode = errorCode; 
    Response.StatusDescription = errorMessage; 

Il est évident que vous voudrez peut-être effectuer un traitement supplémentaire - par exemple, avant de faire tout cela, je compare la requête d'origine avec ma base de données Redirections pour vérifier le contenu déplacé/url, et je ne retomberai que si je ne trouvais pas de redirection appropriée .

+0

Merci, cela résout notre problème. – Thomas

+0

@ Thomas Schreiner - Pas de problèmes, heureux d'aider. –