如何最好地实施“网站关闭”功能?

时间:2009-02-17 13:07:48

标签: asp.net-mvc

我们要求通过远程通知(更改数据库值)自动关闭ASP.NET MVC网站。哪里是实施这个的最佳地点?

  • 基本控制器类
  • Global.asax中
  • 自定义属性
  • 其他

更新

很多使用app_offline的建议,但这种情况将每天发生,并且将完全由数据库启动,因此我宁愿让应用程序采取主动而不是外部推送文件。

此外,我可能需要将用户重定向到保留页面(最好是MVC控制器方法以保持一致)。我更倾向于在我的BaseController中捕获它并处理它

5 个答案:

答案 0 :(得分:13)

有一种“优雅地”终止ASP.NET 2.0 webapp的标准方法 - 只需将App_Offline.htm删除到应用程序的根目录即可。请参阅this

答案 1 :(得分:5)

如果你必须以编程方式进行,我会使用Global.asax Application_BeginRequest。

您可以将Response.Redirect页面重定向到“Offline.aspx”,它可以从数据库或任何您需要的内容中检索消息。当然,你必须查看请求,看它是否试图进入“Offline.aspx”,否则你最终会陷入无限循环。

或者也许您的所有应用程序都可以重定向到一个网站,这将消除大多数复杂功能。

答案 2 :(得分:2)

我会自己回答这个问题,因为我采取了不同的方式,但感谢大家的回应。

我最终做的是覆盖我的BaseController类中的OnActionExecuting()(我的所有控制器都派生自)。

在这种方法中,我检查数据库(使用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

答案 3 :(得分:1)

在Global.asax文件中处理此类行为听起来像是最佳解决方案,并重定向到静态“内联/关闭”页面。处理Application_BeginRequest方法的请求,检查网站是否处于活动状态,是否让它继续,如果不是在线Response.Redirect请求到静态页面。

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();
    }
}

答案 4 :(得分:-5)

抱歉,不了解ASP.NET,但有用的话:

我们的网站有一个APPLICATION.ASP页面(CMS /数据库合并类型的东西);这可能不常见,因此可能会限制实用性,但也许可以通过所有ASPX文件顶部的INCLUDE来实现

我们将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页面显示一个保留页面 - 我们可以在进行更多细微更改时使用它。