0

我有一个使用 SQL Server 作为会话状态管理器的 MVC 2.0 站点。我试图解释一个网络错误,其中我的站点失去了与 SQL 服务器本身的连接。

出于非常基本的测试目的,我在 Global.asax 文件中使用 Application_Error(object sender, EventArgs e) 来记录错误,然后将用户转发到一般错误页面。当会话状态管理器尝试再次连接并在不能导致再次调用 Application_Error() 函数时引发异常时,会出现问题。这会导致无限循环。

有没有办法为控制器中的给定操作禁用任何连接到会话状态 SQL 服务器的尝试?

4

1 回答 1

0

对于任何展望未来的人,我通过在 global.asax 文件中使用以下代码解决了这个问题:

protected void Application_Error(object sender, EventArgs e) {
    // Get Exception
    var ex = Server.GetLastError();
    // Looking for SqlTimeout, which is inner exception to HttpExecption
    // when it occurs.
    if (!typeof(HttpException).IsInstanceOfType(ex))
        return;
    // Clear response.
    HttpContext.Current.Response.Clear();
    // Check inner
    if (ex.InnerException != null && typeof(SqlException).IsInstanceOfType(ex.InnerException)) {
        // Clear error
        Server.ClearError();
        // Redirect to basic html error.
        Server.Transfer("/site_down.html", false);
    }
    else {
        // Send to general error page.
        Response.Redirect("~/error/", true);
    }
}
于 2011-11-03T13:57:21.643 回答