2015-02-03 2 views
0

Я получил веб-приложение MVC4, работающее и функционирующее должным образом, начиная с почти года. В последнее время при просмотре журналов ошибок производства я обнаружил множество таинственных записей исключений одного типа. Я проверил журналы и обнаружил, что эти исключения встречаются как в среде Бета, так и в производственной среде, но не в локальном (похоже, как подсказка - см. Результаты 1 ниже).Кто вызывает просмотр ошибок и почему?

Есть две последующие записи:

Одним из них является: Id

Тема: 56, сообщений: Server_Exception - Вид «Ошибка» или его мастер не был найден или нет вид двигателя не поддерживает было найдено: . Поиск в следующих местах: ~/Views/OrganizationUser/Error.cshtml ~/Views/OrganizationUser/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml

Вторая запись журнала: Id

тема: 56, сообщений: Server_Exception - Stack Trace - на System.Web.Mvc.ViewResult.FindView (ControllerContext контекст) на System.Web.Mvc.ViewResultBase.ExecuteResult (Контекст ControllerContext) по адресу System.Web.Mvc.Async.Asy ncControllerActionInvoker. <> c__DisplayClass25.b__22 (IAsyncResult asyncResult) в System.Web.Mvc.Controller. <> c__DisplayClass1d.b__18 (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) в System.Web.Mvc.Controller.EndExecuteCore (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) по адресу System.Web.Mvc.MvcHandler. <> c__DisplayClass8.b__3 (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult аг) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() на System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, Логическое & completedSynchronously)

исключение регистрируется от Application_Error() в Global.asax.cs так:

  var ex = Server.GetLastError(); 

      if (ex != null) 
      { 
       logger.Log(string.Format("Server_Exception - {0}", ex.Message), LogCategory.Error); 
       logger.Log(string.Format("Server_Exception - Stack Trace - {0}", ex.StackTrace), LogCategory.Error); 
      } 

А вот снимок сообщений журнала БД:

enter image description here

Поиск/Анализ:

  1. Поскольку ошибки регистрируются только на удаленном сервере, он говорит мне, что он должен делать с тем, как MVC обрабатывает удаленные ошибки? CustomErrors? - Я не определил его в web.config. Нужно ли мне?

  2. Но главный вопрос заключается в том, что вызвало ошибку? И кто ищет имя вида Ошибка? Я знаю, что вам трудно догадаться, но просто проверить мою удачу.

  3. Другое обнаружение - это исключения, которые регистрируются после выхода пользователя из системы. В моей форме входа в систему я проверяю isAuthenticated, и если пользователь не прошел проверку подлинности, я регистрирую сообщение «Запрос не аутентифицирован, показывая регистрационную форму». и отобразить форму входа в систему. Я могу видеть это сообщение в журнале до вышеописанных сообщений об исключениях. Итак, что происходит на login.cshtml, который вызывает контакт с сервером, который генерирует ошибку? Я проверил, страница входа и _Layout, у которой много встроенного кода сервера, но не мог понять, что может заставить сервер попытаться загрузить страницу ошибок.

Я думаю, что внутри MVC вызывает страницу ошибок, которая не существует в моем исходном коде и, следовательно, это исключение. Но почему страница «Ошибка»? Я думал получить совет, что проверить в этом случае. Пожалуйста, сообщите, если вы хотите, чтобы я делил все, что могло помочь вам понять мою проблему.

+0

Выполняйте поиск уровня на уровне «return View (« Ошибка ») или просто« Просмотр («Ошибка») без окружающих цитат. Готов поспорить, вы получите удар от AccountController. – rism

+0

@rism - Ты проиграл ставку;) .... Я на самом деле сделал все возможные комбинации в решении. Я подозреваю, что это что-то внутреннее для фреймворка, который вызывает представление Error. Спасибо за предложение в любом случае. – SBirthare

+0

К счастью, RussCam пришел на помощь с самым лучшим ответом. – rism

ответ

2

Я подозреваю, что вы используете System.Web.Mvc.HandleErrorAttribute как этот атрибут будет пытаться искать Error зрения under certain conditions, когда исключение создается внутри контроллера действий:

  1. выполняемой в данный момент действие не ребенок действие
  2. исключение еще не были обработаны или пользовательские ошибки включены
  3. Когда завернутая в HttpException, в exceptio п имеет код состояния 500 HTTP
  4. Исключение является экземпляром System.Exception

Когда все вышеперечисленное верно, System.Web.Mvc.HandleErrorAttribute создает System.Web.Mvc.HandleErrorInfo экземпляр, устанавливает свойство ExceptionContext.Result к ViewResult, который по умолчанию имеет ViewName Недвижимость Error.

Все это вместе. В одном из ваших контроллеров должно быть выбрано исключение, которое соответствует всем вышеперечисленным точкам, в действии контроллера, которое применяет атрибут [HandleError] (возможно, он применяется глобально), который пытается чтобы найти вид Error и не удается это сделать.

Чтобы узнать, каково исходное исключение, вы можете поместить вид Error в свое решение и выписать сообщение об исключении экземпляра модели HandleErrorInfo, переданного в представление (если у текущего пользователя есть соответствующие элементы управления доступом).

+0

спасибо, что вы .. @Russ Cam. У меня есть глобальный фильтр. У меня есть ключ, я проверю ваше предложение и вернусь. Благодарю. – SBirthare

+0

@SBirthare нет беспокойство. Дайте нам знать, как вы справляетесь! –

+0

Я проверил вашу точку, внедряя атрибут ошибки атрибута с сообщениями журнала и вызывая исключение из действия «Вход в систему». Зарегистрированные сообщения об ошибках аналогичны.Я теперь развернул изменения на удаленном сервере, чтобы узнать, что такое фактическое исключение (исходное исключение, вызывающее вызов OnException). – SBirthare