2015-11-03 9 views
0

Я пытаюсь перехватить ошибки, произошедшие на всех сайтах веб-сервера, чтобы делать другие полезные вещи, такие как ведение журнала.Пользовательский модуль обработки ошибок http

В качестве отправной точки, я

  1. Создан модуль HTTP, который крепит обработчик события к событию ошибки сайтов.
  2. Создан тестовый проект MVC с набором методов действий, исключающих исключения.
  3. Добавлен созданный DLL-класс класса http в GAC.

Http библиотека классов модуля реализована как:

Я создал проект библиотеки классов с только один класс расширения IHttpModule. Обратите внимание, что это просто упрощенная версия.

 using System; 
     using System.Reflection; 
     using System.Runtime.InteropServices; 
     using System.Web; 

     namespace MyWebModules 
     { 
      [ComVisibleAttribute(true)] 
      public class MyErrorModule : IHttpModule 
      { 
       public void Dispose() 
       { 
        throw new NotImplementedException(); 
       } 

       public void Init(HttpApplication context) 
       { 
        context.Error += new EventHandler(OnError); 
       } 

       private void OnError(object sender, EventArgs e) 
       { 
        throw new Exception("Custom exception from MyErrorModule"); 
        //TODO removed the above exception and add real life code here. 
       } 
      } 
     } 

Я добавил DLL в GAC, с помощью процесса ниже:

enter image description here

  1. Использование csc.exe, я получаю файл ".netmodule" от ".cs" код файл
  2. Файл .snk относится к проекту.
  3. al.exe нуждается в «.netmodule» и «.snk», чтобы дать сильное имя .dll
  4. С прочным именем .dll имеет квалификацию, которая будет добавлена ​​в GAC.

Тестирование с использованием тестового проекта MVC.

Сайт испытания web.config имеет следующий раздел.

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <remove name="MyCustomWebModules" /> 
    <add name="MyCustomWebModules" type="MyWebModules.MyErrorModule,MyWebModules" /> 
    </modules> 
</system.webServer> 

Когда я получить доступ к тест MVC сайт, я ожидал увидеть ошибку, которая говорит: «Custom исключение из MyErrorModule»

Вместо этого я получаю эту ошибку:

«Не удалось загрузить файл или сборку «MisWebModules» или одну из ее зависимостей. Система не может найти указанный файл ».

+0

Прежде всего, вы должны проверить свое определение модуля http в web.config. Указывает ли оно имя сборки и токен открытого ключа правильно? Если да, включите и проверьте журналы слияния. Это даст подробный отчет о том, почему процесс загрузки сборки не удался –

+0

Да У меня есть этот раздел в моем web.config. и моя машина dev использует IIS7.5, поэтому теги модулей должны быть точными. –

+1

Время Fusion, то я думаю –

ответ

1

Хорошо. У меня неверный номер версии в web.config. Я исправил это, и он работает.

Всесторонний тег модуля в файле web.config должен содержать следующие детали сборки GAC.

  • Dll Информация
  • номер версии
  • культура
  • открытый ключ маркер

Следующая команда может быть использована, чтобы увидеть детали.

gacutil/l