Обработка ошибок соединения состояния сеанса ASP.NET MVC 2.0

У меня есть сайт MVC 2.0, который использует SQL Server в качестве диспетчера состояния сеанса. Я пытаюсь учесть сетевую ошибку, из-за которой мой сайт теряет связь с самим сервером SQL.

Для базовых целей тестирования я использую Application_Error(отправитель объекта, EventArgs e) в файле Global.asax для регистрации ошибки, а затем пересылаю пользователя на страницу с общей ошибкой. Проблема возникает при переадресации на страницу с общей ошибкой, диспетчер состояний сеанса пытается подключиться снова и выдает исключение, когда не может вызвать повторный вызов функции Application_Error(). Это приводит к бесконечному циклу.

Есть ли способ отключить любые попытки подключения к SQL-серверу состояния сеанса для данного действия в контроллере?

1 ответ

Решение

Для тех, кто смотрит в будущее, я решил эту проблему, используя этот код в файле 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);
    }
}
Другие вопросы по тегам