Question

Notre Situation:

Nous avons plusieurs serveurs Web derrière un loabalancer (Astaro Security Gateway). Sur les serveurs Web, nous courons une application asp.net et nous avons customerrorpages configuré pour 404 et 500 codes d'état.

Maintenant, quand 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 elle encore en vie et s'il vérifie la first code d'état html. Donc, il ne voit que le 302. Tous les codes ci-dessous 500 est traité comme serveur est en cours d'exécution.

Question:

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

Modifier

Par application n'a pas pu démarrer, je veux dire que lors du démarrage, il y avait des erreurs. Certaines parties essentielles ne peuvent pas être initialilzed et par conséquent chaque page ne parvient pas à exécuter.

Était-ce utile?

La solution

A deux façons:

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

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

J'ai ce qui suit dans un de mes web.configs:

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

Ensuite, dans ma page ErrorHandler je vérifie 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 pouvez vouloir faire un traitement supplémentaire - par exemple avant que je fais tout ce que je suis en comparant la demande originale avec ma base de données Redirects pour vérifier le contenu urls / vanité bougeais, et seulement de retomber à cela si je ne pouvais pas trouver un redirect approprié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top