Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC:如何防止导致IIS应用程序池关闭的异常_C#_Asp.net Mvc_Exception - Fatal编程技术网

C# ASP.NET MVC:如何防止导致IIS应用程序池关闭的异常

C# ASP.NET MVC:如何防止导致IIS应用程序池关闭的异常,c#,asp.net-mvc,exception,C#,Asp.net Mvc,Exception,我有一个应用程序,当连接到数据库失败时会抛出异常。此异常似乎会导致应用程序池在多次失败后关闭 如何捕获此异常以避免关闭应用程序池? 下面是出现异常时执行的代码 public class CustomHandleErrorAttribute : HandleErrorAttribute { private static readonly SecureLogger log = new SecureLogger(LogManager.GetLogger(MethodBase.GetCurren

我有一个应用程序,当连接到数据库失败时会抛出异常。此异常似乎会导致应用程序池在多次失败后关闭

如何捕获此异常以避免关闭应用程序池? 下面是出现异常时执行的代码

public class CustomHandleErrorAttribute : HandleErrorAttribute
{
    private static readonly SecureLogger log = new SecureLogger(LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType));
    public override void OnException(ExceptionContext filterContext)
    {
        if (!filterContext.HttpContext.IsCustomErrorEnabled)
        {
            return;
        }

        if (!ExceptionType.IsInstanceOfType(filterContext.Exception))
        {
            return;
        }

        log.Error("Internal server error occurred while handling web request.", filterContext.Exception);

        var controllerName = (string)filterContext.RouteData.Values["controller"];
        var actionName = (string)filterContext.RouteData.Values["action"];
        var model = new HandleErrorInfo(new Exception("Internal server error occurred while handling web request."), "Error", "Index");

        filterContext.Result = new ViewResult
        {
            ViewName = View,
            ViewData = new ViewDataDictionary<HandleErrorInfo>(model)
        };

        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
        filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

        filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }
}
public List<DataModel> GetStudentData(List<string> idList)
{
    try
    {
        using (MyDBContext dbcontext = new MyDBContext())
        {
            return dbcontext.studentData.Where(x => idList.Contains(x.userId)).Select(
                    x => new DataModel
                    {
                        StudentId = x.userId,
                        StudentName = x.Name
                    }
                )
                ?.ToList();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
公共类CustomHandleErrorAttribute:HandleErrorAttribute
{
private static readonly SecureLogger log=new SecureLogger(LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType));
公共覆盖无效OneException(例外上下文筛选器上下文)
{
如果(!filterContext.HttpContext.IsCustomErrorEnabled)
{
返回;
}
如果(!ExceptionType.IsInstanceOfType(filterContext.Exception))
{
返回;
}
log.Error(“处理web请求时发生内部服务器错误。”,filterContext.Exception);
var controllerName=(字符串)filterContext.RouteData.Values[“controller”];
var actionName=(字符串)filterContext.RouteData.Values[“action”];
var model=newHandleErrorInfo(新异常(“处理web请求时发生内部服务器错误”),“错误”,“索引”);
filterContext.Result=新的ViewResult
{
ViewName=视图,
ViewData=新的ViewDataDictionary(模型)
};
filterContext.ExceptionHandled=true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode=(int)HttpStatusCode.InternalServerError;
filterContext.HttpContext.Response.TrySkipIisCustomErrors=true;
}
}
导致异常的代码

public class CustomHandleErrorAttribute : HandleErrorAttribute
{
    private static readonly SecureLogger log = new SecureLogger(LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType));
    public override void OnException(ExceptionContext filterContext)
    {
        if (!filterContext.HttpContext.IsCustomErrorEnabled)
        {
            return;
        }

        if (!ExceptionType.IsInstanceOfType(filterContext.Exception))
        {
            return;
        }

        log.Error("Internal server error occurred while handling web request.", filterContext.Exception);

        var controllerName = (string)filterContext.RouteData.Values["controller"];
        var actionName = (string)filterContext.RouteData.Values["action"];
        var model = new HandleErrorInfo(new Exception("Internal server error occurred while handling web request."), "Error", "Index");

        filterContext.Result = new ViewResult
        {
            ViewName = View,
            ViewData = new ViewDataDictionary<HandleErrorInfo>(model)
        };

        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
        filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

        filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }
}
public List<DataModel> GetStudentData(List<string> idList)
{
    try
    {
        using (MyDBContext dbcontext = new MyDBContext())
        {
            return dbcontext.studentData.Where(x => idList.Contains(x.userId)).Select(
                    x => new DataModel
                    {
                        StudentId = x.userId,
                        StudentName = x.Name
                    }
                )
                ?.ToList();
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}
public List GetStudentData(List idList)
{
尝试
{
使用(MyDBContext=new MyDBContext())
{
返回dbcontext.studentData.Where(x=>idList.Contains(x.userId))。选择(
x=>新数据模型
{
StudentId=x.userId,
StudentName=x.Name
}
)
?.ToList();
}
}
捕获(例外情况除外)
{
掷骰子;
}
}

故障代码的确切位置是哪里?它是在应用程序启动时执行还是在请求时执行?@HirasawaYui更新了代码部分。它根据请求执行。但在执行过程中,数据库正在维护,因此无法连接到数据库。哦,现在我明白了。处理一个异常而不是重新触发它怎么样?您还可以尝试调整应用程序池设置,如以下所示(第二个答案)@HirasawaYui有许多具有这种结构的函数调用。所以我想知道它在哪里重新调用,这样我就可以在全局错误处理中捕捉到它来处理这种情况。