ASP. NET MVC: как предотвратить исключение, вызвавшее отключение пула приложений IIS - PullRequest
0 голосов
/ 03 марта 2020

У меня есть приложение, которое выдает исключение при сбое подключения к базе данных. Кажется, что это исключение вызывает закрытие пула приложений после нескольких сбоев.

Как отловить это исключение, чтобы не завершать работу пула приложений? Ниже приведен код, который выполняется при возникновении исключения

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...