【问题标题】:How to define error-handling logic at the server level如何在服务器级别定义错误处理逻辑
【发布时间】:2012-04-04 14:01:34
【问题描述】:

对于网站/ vpath,可以处理 Application_Error 事件以在错误被发送回浏览器之前捕获它们。是否也可以在服务器级别以某种方式执行此操作?也就是说,在根级别定义一个方法,如果网站发生错误,该方法将执行,但该网站无论出于何种原因都无法处理该错误。

我知道您可以使用根级别的 web.config 来定义每个 HTTP 状态代码的自定义错误消息。但是,这并不适合我的情况,因为我想根据应用程序逻辑返回不同类型的内容(即 HTML 或其他内容)。

【问题讨论】:

    标签: asp.net iis-7 error-handling


    【解决方案1】:

    可以在 applicationHost.config 中注册自定义 http 模块。然后这个模块被目标机器上的所有 IIS 应用程序使用。

    1) 创建一个带有http模块的签名类库项目:

    public class ErrorHandlingModule : IHttpModule
    {
        public void Dispose() { }
    
        public void Init(HttpApplication context)
        {
            context.Error += new EventHandler(context_Error);
        }
    
        void context_Error(object sender, EventArgs e)
        {
            // handle error
        }
    }
    

    2)Install将类库导入GAC,这样就可以被所有IIS应用共享了。

    3) Install http 模块到 applicationHost.config 文件。该文件通常位于 C:\Windows\System32\inetsrv\config 中。这个文件夹里的文件只能被64位进程访问(32位操作系统没有这个问题),VS2010看不到,资源管理器可以。 applicationHost.config 片段可能如下所示:

    <location path="" overrideMode="Allow">
        <system.webServer>
            <modules>
                <add name="MyModule" preCondition="managedHandler" type="GlobalErrorHandler.ErrorHandlingModule, GlobalErrorHandler, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bfd166351ed997df" />
    

    【讨论】:

    • 谢谢,这正是我想要的!一个后续问题,如果您不介意的话:如果我有这个模块并且还处理 global.asax 中的 Application_Error,那么首先调用哪个?
    • 很高兴它有帮助。在我的情况下,首先调用 http 模块。但我认为至少不能保证我找不到任何提到应用程序事件处理程序执行顺序的文档。如果您发现有关此主题的信息,请告诉我:)。
    【解决方案2】:

    我不清楚你的问题是什么,但根据我的理解。在 application_error 你可以使用,

    Server.GetLastError() to get last error occured in server level.
    

    【讨论】:

    • 为了清楚起见更新了问题。我的问题是你是否可以有一个代码块来捕捉它的网站未能捕捉到的任何错误。如此有效地像整个服务器的 global.asax application_on_error,而不是每个单独的应用程序。
    • 我认为你只能在事件 viwer 中看到。
    猜你喜欢
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多