Как лучше всего реализовать функциональность «закрытый сайт»? - PullRequest
0 голосов
/ 17 февраля 2009

У нас есть требование, чтобы наши веб-сайты ASP.NET MVC автоматически закрывались удаленным уведомлением (изменение значения базы данных). Где было бы лучшее место для реализации этого?

  • Базовый класс контроллеров
  • Global.asax
  • Пользовательский атрибут
  • Другое

Обновление

Множество предложений по использованию app_offline, но этот сценарий будет происходить ежедневно и будет инициироваться исключительно базой данных, поэтому я бы предпочел, чтобы приложение проявило инициативу, а не что-то внешнее подтолкнуло в файл.

Кроме того, мне, вероятно, потребуется перенаправить пользователей на удерживающую страницу (желательно, чтобы метод контроллера MVC сохранял все согласованно). Я больше склоняюсь к тому, чтобы поймать его в моем BaseController и заставить его справиться с этим

Ответы [ 5 ]

13 голосов
/ 17 февраля 2009

Существует стандартный способ «изящного» завершения веб-приложения ASP.NET 2.0 - просто перетащите App_Offline.htm в корневой каталог вашего приложения. Смотрите это .

5 голосов
/ 17 февраля 2009

Я бы пошел с Global.asax Application_BeginRequest, если вам нужно сделать это программно.

Вы можете ответить. Переадресовать страницу на «Offline.aspx», который может извлечь сообщение из базы данных или что угодно. Конечно, вам нужно посмотреть на запрос, чтобы увидеть, пытался ли он добраться до «Offline.aspx», иначе вы бы оказались в бесконечном цикле.

Или, может быть, все ваши приложения могут быть перенаправлены на один веб-сайт, который устранит большинство осложнений.

2 голосов
/ 17 февраля 2009

Я собираюсь ответить на это сам, так как я сделал это по-другому, но спасибо всем за их ответы.

В итоге я переопределил OnActionExecuting () в моем классе BaseController (из которого были получены все мои контроллеры).

В этом методе я проверяю базу данных (используя 1-минутный кеш), и если веб-сайт закрыт, я загружаю представление для отображения закрытого сообщения. Код показан ниже

Protected Overrides Sub OnActionExecuting(ByVal filterContext As System.Web.Mvc.ActionExecutingContext)
            MyBase.OnActionExecuting(filterContext)

            Dim _cfgService = ObjectFactory.GetInstance(Of IConfigService)()

            If _cfgService.DynamicConfig.WebSiteClosed Then
                filterContext.Result = ErrorHandler(_cfgService.DynamicConfig.WebSiteClosedTitle, _
                                                    _cfgService.DynamicConfig.WebSiteClosedMessage)
            End If
        End Sub
1 голос
/ 17 февраля 2009

Обработка этого типа поведения в файле Global.asax звучит как лучшее решение и перенаправление на статическую страницу "ofline / closed". Обработайте запрос в методе Application_BeginRequest, проверьте, активен ли сайт, позволяет ли он продолжать работу, если он не подключен к сети Response. Перенаправьте запрос на статическую страницу.

protected void Application_BeginRequest(object sender, EventArgs e)
{
    string redirectURL = "~/Offline.aspx";  //some static page
    bool isOnline = false;  //SQL Call, config value

    if (!isOnline && !string.IsNullOrEmpty(redirectURL))
    {
        Response.RedirectLocation = redirectURL;
        Response.End();
    }
}
0 голосов
/ 17 февраля 2009

Извините, не знаю про ASP.NET, но в случае необходимости:

У нас есть одна страница APPLICATION.ASP для нашего сайта (CMS / База данных типа слияния); это, возможно, не распространено и, следовательно, может ограничивать полезность, но может быть реализовано с помощью INCLUDE в верхней части всех файлов ASPX

Мы переименовываем APPLICATION.ASP в TEST.ASP и копируем HOLDING_PAGE.ASP в APPLICATION.ASP

HOLDING_PAGE.ASP присутствует в папке WWW, поэтому всегда готов и доступен. Он содержит сообщение «Сайт недоступен» и т. Д. И самодостаточен для всех CSS (нет включаемых файлов, нет доступа к БД). Единственным исключением является логотип компании (который, очевидно, является внешним по отношению к этому файлу)

Этот метод предотвращает любой доступ к сайту, не зависит от наличия работающего соединения с БД и позволяет нам изменять что-либо на сайте, не мешая удерживающей странице (кроме логотипа компании, но изменение которого, вероятно, будет доброкачественная)

Мы по-прежнему можем получить доступ к сайту изнутри, используя TEST.ASP - так что мы можем протестировать любые новые функции развертывания, прежде чем удалять удерживающую страницу и запускать сайт в эксплуатацию. Если вы хотите предотвратить анонимное использование TEST.ASP, откажитесь от анонимного разрешения.

Удалить страницу удержания: удалить APPLICATION.ASP (т.е. страницу удержания) и переименовать TEST.ASP в APPLICATION.ASP

У нас также есть флаг базы данных, который заставляет обычную страницу APPLICATION.ASP отображать удерживающую страницу - которую мы можем использовать при внесении более мелких изменений.

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