【问题标题】:where can I catch the db connection exception in session mode: sqlserver?我在哪里可以在会话模式下捕获数据库连接异常:sqlserver?
【发布时间】:2014-04-18 20:29:19
【问题描述】:

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

我目前在我的开发服务器上,所以我想断开互联网[会话数据库在线],看看会发生什么。不出所料,著名的死亡黄页出现了。然后我想抓住这个异常并使用:

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

但我很惊讶这不会在这里引起任何异常;因为在这个阶段应用程序不会联系 SQL Server。

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

我的问题是:

有什么方法可以捕捉代码中的异常吗?除了Global.asax?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    YourCustomExceptionHandlingAttribute 应该实现HandleErrorAttribute

    【讨论】:

    • 不错的答案,但如果它显示示例和代码会很棒......感谢您的时间
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 2011-05-12
    • 2019-02-12
    • 2016-09-06
    • 2018-04-03
    • 2020-01-11
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多