【问题标题】:How to prevent "503 Service Unavailable" when database is down数据库关闭时如何防止“503服务不可用”
【发布时间】:2016-03-28 12:03:58
【问题描述】:

当我的数据库服务器出现故障时,这会导致在另一台服务器上托管 MVC 应用程序的 IIS 崩溃。

然后所有页面都显示 HTTP 错误 503:服务不可用。

我需要一个解决方案,例如在 global.asax 中放置一个错误处理程序,例如 Application_Error(),但这个不符合我的需要。我该如何处理这种情况,以便我的应用程序不会崩溃,而是为每个错误显示特定的错误页面。

【问题讨论】:

  • 这是一个已解决的问题,实现起来相当简单。尝试使用故障转移集群和负载均衡器。数据库将在 2 个(或更多)数据库服务器上进行镜像 - 如果其中一个发生故障,另一个将接受请求。 msdn.microsoft.com/en-us/library/ms189134.aspx
  • 如果您使用的是备份数据库,这反映了第一个数据库的更改,您不只是使用您自己的集群版本 - 在这种情况下,为什么不完全实施现有的解决方案?
  • @user1666620 谢谢。我期待着实施 SqlAlwaysOn
  • 虽然,关键是让我的 iis mvc 项目在没有数据库的情况下运行,但我们正在谈论应用程序级处理程序,这就是我在 stackoverflow 中的原因
  • 当您的应用程序池由于您的网站出错很多而关闭时,您会收到 503。防止错误,防止 503。无论您是通过在任何地方添加 try-catch 还是在其他地方处理它们都取决于您。

标签: c# sql-server asp.net-mvc iis


【解决方案1】:

正如What possibilities can cause "Service Unavailable 503" error?TechNet: 503-Service Unavailable (IIS 6.0) 中所述,503 错误有很多可能的原因。

在您的情况下,它是 IIS 的“rapid-fail protection”启动。您的应用程序使您的工作进程崩溃,并且在很短的时间内发生了很多次,服务器认为您的应用程序存在固有问题并关闭应用程序池关闭。

请注意,应用程序错误(例如不可用数据库发生异常)不应终止工作进程。如果这种情况经常发生,那么还有其他一些非常错误的事情。检查事件日志以找出错误的实际来源并修复它。

与此同时,您可以通过在适当的位置添加try-catch 语句或在Application_Error 中添加全局异常处理程序来防止崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2020-02-21
    • 2018-08-18
    • 1970-01-01
    • 2021-04-26
    • 2022-01-11
    相关资源
    最近更新 更多