Измените статус http 503 на 200 при обслуживании app_offline.htm для определенного URL - PullRequest
11 голосов
/ 22 февраля 2011

Файл app_offline.htm, который обслуживает ASP.NET, возвращает статус http 503. Это правильное поведение для большинства ситуаций.Однако в сценарии, где запрашивается конкретный URL-адрес (например, https://www.mywebsite.com/monitor),, я хотел бы изменить возвращаемый статус http на 200, при этом возвращая статус http 503 во всех других ситуациях. Возможно ли это?

Причина, по которой я хочу сделать это, заключается в том, что всякий раз, когда мы проводим плановое обслуживание на нашем веб-сайте, мы используем файл app_offline.htm, но мы не хотим, чтобы наша служба мониторинга времени безотказной работы (Pingdom.com) сообщала о времени простоя во время нашего запланированногообслуживание.

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

Ответы [ 6 ]

10 голосов
/ 10 марта 2011

Обратите внимание, что App_Offline предназначен только для того, чтобы разобраться с частью ASP.NET, он не имеет никакого отношения к сайту IIS.Все не -ASP.NET-запросы, подобные .htm-, будут проходить через обычный конвейер IIS.

При этом HTTP 503 является ошибкой недоступной службы.App_Offline.htm переводит сайт в автономный режим, это нормально и правильно, что все запросы ASP.NET получают ответ 503, когда сайт находится в автономном режиме.

Обход этого с помощью HttpModule или любого другого кода в ASPТрубопровод .NET не является допустимым решением.

Поскольку вы уже создаете / копируете App_Offline.htm в корне IIS во время обслуживания, я предлагаю добавить maintenance.htm в качестве документа по умолчанию для вашего /monitor или вашего сайта IIS и создайте / скопируйте в него файл maintenance.htm во время обслуживания: тогда страница по умолчанию будет доступна вне зависимости от того, работает сайт ASP.NET или нет.

Если ваш зонд звонитhttp://servername/monitor/ uri без указания какой-либо страницы, он будет работать.

Вам просто нужно удалить его - как вы удалили App_Offline - после обслуживания.

3 голосов
/ 09 марта 2011

Насколько я знаю, логика app_offline.htm обрабатывается внутри модуля ASP.NET 2.0, но перед началом загрузки любого приложения (что, конечно, является идеей для app_offline.htm * g *).

Я предлагаю:

  • Добавьте виртуальный каталог с именем monitor в корень вашего (отключенного) веб-сайта и назначьте его некоторой читаемой IIS папке.
  • Не делайте виртуальный каталог приложением, поэтому ASP.NET должен держать его подальше от этой папки.
  • Положите, например, копия вашего app_offline.htm файла, переименованного в default.htm (или что-либо из вашего списка имен файлов по умолчанию) в эту папку.

Таким образом IIS должен обслуживать html-файл с ответом 200 при доступе к https://www.mywebsite.com/monitor.

Ах, и чтобы соблюдать предупреждение Adilson о поисковых системах, просто добавьте <meta name="robots" content="noindex"> в ваш файл на случай, если сайт будет доступен для поисковых систем.

2 голосов
/ 13 марта 2011

Если вы используете IIS 7 и интегрированный конвейер, вы все равно можете создать HttpModule для запросов, которые не являются частью конвейера ASP.NET, т.е. запросы i / e .Htm.

http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/

Жизненный цикл ASP.NET IIS 7

http://learn.iis.net/page.aspx/121/iis-7-modules-overview/

0 голосов
/ 07 марта 2011

Эй, чувак. Будьте осторожны при этом! Ответ 200 может сделать вашу страницу ошибки проиндексированной Google и другими поисковыми системами.

Если вы все же решите это сделать, я думаю, вам следует создать HttpModule и поместить его в верхнюю часть стека модулей. Этот модуль должен проверить, существует ли файл App_offline.html, если так, то вы проверяете, поступил ли запрос от монитора сайта. В этом случае вы можете ответить с помощью 200, в противном случае код ответа должен быть 503. Во избежание неправильной индексации сайта.

Важно: пул приложений вашего сайта должен быть в интегрированном режиме.

0 голосов
/ 22 февраля 2011

Вы можете использовать http redirect на уровне IIS.

0 голосов
/ 22 февраля 2011

Вы можете обработать метод Global.asax Application_Error, определить свой URL, определить свою ошибку, перенаправить на свою страницу

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim ctx = HttpContext.Current
        dim myerror = ctx.Error
        If HttpContext.Current.Request.Path = "mypath" Then
            HttpContext.Current.Response.Redirect("~/mydestpage.aspx")
        End If
    End Sub

Это вернет сначала 302 для вашего предыдущего запроса, а затем перенаправит на страницу, которая показывает 200 ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...