2015-11-03 153 views
0

我试图拦截在Web服务器上的所有网站发生的错误,以便做其他有用的东西,如日志记录。自定义错误处理http模块

作为一个起点,我有

其中附加的事件处理程序,以网站的错误事件
  1. 创建HTTP模块。
  2. 使用一组操作方法创建测试MVC项目抛出异常。
  3. 将创建的http模块类dll添加到GAC。

    我创建了一个类库项目只有一个类扩展的IHttpModule:为

的HTTP模块类库实现。请注意,这只是一个简化版本。

 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海关总署,按照以下流程:

enter image description here

  1. 使用CSC.EXE,我得到 “的.cs” “.netmodule” 文件代码文件
  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网站,我希望看到它说的错误:

“从MyErrorModule自定义异常”相反,我得到这个错误:

“无法加载文件或程序集'MisWebModules'或它的一个依赖项,系统找不到指定的文件。“

+0

首先,您应该在web.config中检查您的http模块定义。它是否正确指定程序集名称和公钥标记?如果是,则启用并检查融合日志。这将给出一个详细的报告,说明程序集加载过程失败的原因。 –

+0

是的,我在web.config中有该部分。和我的开发机器使用IIS7.5,所以模块标签应该没问题。 –

+1

融合时间,然后我猜 –

回答

1

好的。我在web.config中得到了错误的版本号。我解决了这个问题,它工作。

web.config文件中的综合模块标签应包含以下GAC组件详细信息。

  • DLL的信息
  • 版本号
  • 文化
  • 公钥标记

以下命令可用于查看详细信息。

gacutil/l