我在哪里可以在会话模式下捕获数据库连接异常:sqlserver?

时间:2014-04-18 20:29:19

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

我有一个ASP.NET MVC 5应用程序,我使用SQL Server设置会话状态。一切正常。

我目前在我的开发者服务器上,所以我想断开互联网[会话数据库在线],看看会发生什么。毫不奇怪,着名的黄页死亡发生了。然后我想抓住这个例外我用过:

try{
session["age"]= 25;
}catch
{ //log the exception here and continue}

但我很惊讶这不会导致任何例外;因为应用程序在此阶段不会联系SQL Server。

似乎当IIS准备好视图页面以显示用户时;然后它会联系SQL Server以保存会话信息,如果失败,那么它将抛出死亡的黄页。

我的问题是:

有没有办法在代码中捕获异常?除了Global.asax

1 个答案:

答案 0 :(得分:3)

会话加载/访问发生在请求生命周期(HttpApplication.AcquireRequestState事件)的开头,并在请求生命周期(HttpApplication.ReleaseRequestState事件)结束时保持不变。它不是你从会话中获得价值的地方。要捕获它,请使用MVC全局操作过滤器来处理异常,包括在这种情况下将发生的SQLException。或者,创建一个HttpModule来处理异常事件。

RegisterGlobalFilters方法(由Global.asax.cs调用)中:

public class FilterConfig
{
    public static void RegisterGlobalFilters( GlobalFilterCollection filters )
    {
        filters.Add( new YourCustomExceptionHandlingAttribute } );
    }
}

YourCustomExceptionHandlingAttribute应该实施HandleErrorAttribute