Как определить, что запуск приложения не удался?

Наша ситуация:

У нас есть несколько веб-серверов за loabalancer (Astaro Security Gateway). На веб-серверах мы запускаем приложение asp.net, и у нас есть клиентские страницы, настроенные для 404 и 500 кодов состояния.

Теперь, когда приложение не запускается, каждый запрос перенаправляется на страницу ошибок путем отправки кода состояния 302, а сама страница ошибок затем отправляет 500.

Loadbalancer отправляет запрос HEAD нашим веб-серверам каждые 15 секунд, чтобы проверить, жив ли он, и если да, то проверяет первый код состояния html. Таким образом, он видит только 302. Каждый код ниже 500 рассматривается как работающий сервер.

Вопрос:

Как мы можем заставить нашу балансировку нагрузки работать, если приложение не запустилось?

Редактировать:

Под приложением не удалось запуститься, я имею в виду, что при запуске были ошибки. Некоторые важные части не могут быть инициализированы, и поэтому каждая страница не может быть выполнена.

1 ответ

Решение

Пара способов:

В вашем файле web.config в режиме customErrors установите redirectMode в ResponseRewrite - это удаляет перенаправление 302 с сервера на страницу с ошибкой - здесь также есть счастливое совпадение: пользователи могут легко увидеть, какой была оригинальная страница, которую они запрашивали, и могут повторить попытку с F5, если это может решить проблему.

Если вы подключаетесь к событию ApplicationError, убедитесь, что вместо перенаправления на страницы ошибок вы используете Server.Transfer вместо.

У меня есть следующее в одном из моих web.configs:

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

Затем на своей странице ErrorHandler я проверяю последнюю ошибку с сервера и настраиваю:

  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;

Очевидно, что вы, возможно, захотите выполнить дополнительную обработку - например, прежде чем я сделаю все это, я сравниваю исходный запрос с моей базой данных Redirects для проверки перемещенных URL-адресов содержимого / тщеславия и возвращаюсь к этому, только если не смог найти подходящий перенаправления.

Другие вопросы по тегам