2015-09-03 6 views
4

У меня есть общественный сайт (связанный с Банком), который должен быть обновлен PROD в ближайшие недели. Мне нужно отобразить страницу «Вниз для обслуживания» во время окна отключения. Поскольку банк предоставил мне определенные требования к странице, которая должна быть оформлена точно так же, как сам веб-сайт, я не думаю, что решение app_offline.htm будет работать для меня, поскольку я не смогу получить доступ к моим таблицам стилей и изображениям, потому что IIS перенаправляет все запросы на эту страницу.Веб-сайт Лучшая практика «Вниз для обслуживания»

Мне было интересно, какой был бы лучший дизайн решения, чтобы я мог использовать стили и изображения на своем веб-сайте на моей странице обслуживания? Мне сказали, что хороший способ сделать это - создать новый веб-сайт, включить стиль и изображения и развернуть его как отдельный веб-сайт в IIS <, а затем во время окна отключения я переключу привязку IP-адреса в IIS, чтобы указать на мой сайт обслуживания. По завершении технического обслуживания я переключу его обратно на основной сайт. Это хороший способ сделать это?

UPDATE:

Я осуществил следующее, и это, кажется, работает очень хорошо. Когда я отбрасываю файл Outage.htm или Maintenance.htm в свою веб-корневую папку, он будет перенаправлять соответственно. Отключение и плановое обслуживание имеют разные стили и содержание, поэтому мне пришлось создать 2 страницы. Кроме того, когда в режиме отключения или обслуживания и запрос поступает с localhost, то не перенаправляйте, чтобы разрешить тестирование веб-сайта после выполнения технического обслуживания при блокировке внешних запросов.

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new CheckForDownPage()); 
    } 
} 

    public sealed class CheckForDownPage : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string ipAddress = HttpContext.Current.Request.UserHostAddress; 

     var outagePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Outage.htm"); 
     var maintenancePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Maintenance.htm"); 

     var isOutage = System.IO.File.Exists(outagePage); 
     var isMaintenance = System.IO.File.Exists(maintenancePage);    

     if ((isOutage || isMaintenance) && ipAddress != "::1") 
     { 
      filterContext.HttpContext.Response.Clear();     
      filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; 
      filterContext.HttpContext.Response.StatusDescription = "Service Unavailable."; 

      filterContext.HttpContext.Response.WriteFile(isOutage ? outagePage : maintenancePage); 

      filterContext.HttpContext.Response.End(); 
      return; 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 
+1

Как вы развертываете свое приложение? Вы заботитесь о текущем состоянии сеанса/пользователя во время развертывания? Сколько времени займет ваше развертывание? Кроме того, вы должны иметь возможность загрузить css на странице app_offline.htm. –

+0

Я не забочусь о сеансах и т. Д. Весь трафик на сайт будет заблокирован до выхода в автономный режим. – FaNIX

ответ

3

Я реализовал следующее, и, похоже, он работает очень хорошо. Когда я отбрасываю файл Outage.htm или Maintenance.htm в свою веб-корневую папку, он будет перенаправлять соответственно. Отключение и плановое обслуживание имеют разные стили и содержание, поэтому мне пришлось создать 2 страницы. Кроме того, когда в режиме отключения или обслуживания и запрос поступает с localhost, то не перенаправляйте, чтобы разрешить тестирование веб-сайта после выполнения технического обслуживания при блокировке внешних запросов.

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new CheckForDownPage()); 
    } 
} 

    public sealed class CheckForDownPage : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string ipAddress = HttpContext.Current.Request.UserHostAddress; 

     var outagePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Outage.htm"); 
     var maintenancePage = System.Web.Hosting.HostingEnvironment.MapPath("~/Maintenance.htm"); 

     var isOutage = System.IO.File.Exists(outagePage); 
     var isMaintenance = System.IO.File.Exists(maintenancePage);    

     if ((isOutage || isMaintenance) && ipAddress != "::1") 
     { 
      filterContext.HttpContext.Response.Clear();     
      filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable; 
      filterContext.HttpContext.Response.StatusDescription = "Service Unavailable."; 

      filterContext.HttpContext.Response.WriteFile(isOutage ? outagePage : maintenancePage); 

      filterContext.HttpContext.Response.End(); 
      return; 
     } 

     base.OnActionExecuting(filterContext); 
    } 
} 
+0

Hi Итак, это работает, когда вы публикуете новую версию веб-приложения? Это происходит автоматически? – VAAA

Смежные вопросы