Как отловить необработанное исключение подключения SQL при использовании структуры и EF в MVC - PullRequest
0 голосов
/ 30 августа 2018

Хорошо, поэтому я пытаюсь установить веб-приложение на сервере в другом учреждении нашей компании и столкнулся с проблемой, которую пытаюсь диагностировать. Я получаю печально известное сообщение об ошибке DI «требуется конструктор без параметров», что и отражается в Application_Error в Global.asax.

Я не могу сейчас отладить удаленно, поэтому я бы хотел собрать вместе некоторые базовые, но более подробные способы обработки исключений, которые могут помочь мне понять, что такое настоящее исключение. Есть ли что-нибудь быстрое и простое, что я могу сделать, чтобы получить более подробную информацию об исключении Application_Error?

Итак, чтобы проверить это самостоятельно, я изменил строку подключения, чтобы иметь неверный пароль. Это вызывает исключение SqlException «Ошибка входа для пользователя« xxxxxxxx »». В настоящее время я не занимаюсь обработкой исключений по всему проекту, так как до сих пор не дошел до этого. Я пытаюсь понять, как я могу каким-то образом перенести мои исключения из моих проектов данных / сервисов в веб-проект, чтобы я мог, по крайней мере, увидеть некоторые подробности из браузера, когда я пытаюсь решить проблему при установке.

Первый вызов базы данных в значительной степени имеет стек вызовов, например, StructureMap DoGetInstance -> ServiceLayer UserAuthService -> DataLayer UserRepo

Я попытался обернуть свой метод слоя данных в try / catch и перебросить SqlException. Затем я завернул свой ServiceLayer в другой try / catch и сумел поймать это исключение. Он находится между ServiceLayer и распознавателем DI, где я не могу его перехватить, поэтому при отладке я получаю сообщение об ошибке, в котором говорится, что на данный момент существует необработанное исключение. Для тестирования я попытался обернуть это в try / catch, но оно все равно остается необработанным.

Таким образом, в результате получается, что последнее исключение, пойманное в Application_Error, заключается в том, что зависимость для моего контроллера не может быть найдена / контроллер не может быть создан.

protected override object DoGetInstance(Type serviceType, string key) {
        //IContainer container = (CurrentNestedContainer ?? Container);
        IContainer container = Container;
        if (string.IsNullOrEmpty(key))
        {
            try
            {
                    return serviceType.IsAbstract || serviceType.IsInterface
                        ? container.TryGetInstance(serviceType)
                        : container.GetInstance(serviceType);

            }
            catch (SqlException ex)
            {
                throw;
            }
            catch (EntityException ex)
            {
                throw;
            }
        }

        return container.GetInstance(serviceType, key);
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...