Как создать пользовательскую страницу обслуживания, возвращающую 503 для Azure?

Я пытаюсь настроить пользовательскую страницу обслуживания в MVC 3, но конкретно в Azure. В основном, чтобы сохранить SEO-дружественность, мне нужно вернуть 503 (Сервис недоступен). Все мои другие настраиваемые страницы ошибок работают в Azure (например, 404) в соответствии с обычным

<customErrors mode="On">
  <error statusCode="404" redirect="404.htm"/>
  <error statusCode="503" redirect="503.htm"/>
</customErrors>

Страница 404 работает, но 503 не отслеживается, и я просто получаю уродливую страницу недоступности службы. У меня ошибка 500 работает нормально через error.cshtml и стандартный атрибут HandleErrorAttribute.

Я даже пытаюсь вернуть свой собственный ActionResult из ActionFilter, используя следующее

public class SiteDownForTestingResult : ActionResult
{
    public SiteDownForTestingResult() : base()
    {
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var path = System.Web.Hosting.HostingEnvironment.MapPath("~/app_testing.htm");

        var response = context.HttpContext.Response;

        response.Clear();
        response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
        response.StatusDescription = "Service Unavailable.";
        response.WriteFile(path);
        response.End();
    }

}

где app_testing - это моя пользовательская страница, а затем установка filterContext.Result = new SiteDownForTestingResult(); из OnActionExecuting ActionFilter, и все же меня встречает простая страница 503 "сервис недоступен"

Это как-то связано с блокировкой application.config в Azure, о которой я не знаю. Это отлично работает на IIS7 и на моей локальной машине, но эмулятор и облако не доставляют удовольствия.

Любая помощь будет оценена по достоинству.


person Mark    schedule 06.07.2012    source источник


Ответы (1)


Насколько я понимаю, пользовательская ошибка 503 генерируется непосредственно из https.sys в основном, когда пул приложений недоступен. И теперь, когда нет пула приложений, ни одна из ваших настроек не будет работать в ваших пользовательских настройках ошибок, которые будут специфичны для пула приложений. Кроме того, большая часть поисковой системы зависит от кода ошибки 503, поэтому результат поиска отображается правильно, и поэтому настройка этой ошибки обычно не выполняется на уровне приложения.

Поскольку вы упомянули эмулятор Windows Azure, я полагаю, что вы используете веб-роль Windows Azure. С помощью веб-роли Windows Azure вы можете настроить IIS с помощью AppCmd.exe в задаче StartUp, что является максимальным уровнем настройки. Вы не можете достичь уровня настройки HTTP.sys в Windows Azure, поэтому ошибка настройки 503 может не работать в Windows Azure.

person AvkashChauhan    schedule 06.07.2012