记得以前做项目时,遇到过这种情况,当时感到很奇怪,为什么刷新一下没黄页了,不过后面的错误很折腾人了,终也让我总结了这个教训。所以我建议:如果在初始化阶段出现了异常,干脆别让程序继续运行了,每个请求都直接显示黄页,直到排除故障为止。

  如何保证初始化异常一直显示?

  当初始化发生异常时,如何保证初始化异常一直显示呢?

  方法其实并不难,我们需要修改一下代码:

    private static Exception s_initException; 
    void Application_Start(object sender, EventArgs e) 
    { 
        try { 
            AppInitializer.Init(); 
        } 
        catch( Exception ex ) { 
            // 记下初始化的异常。 
            s_initException = ex; 
        }     
    } 
    protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
        // 如果存在初始化异常,抛出来。 
        // 直到开发人员发现这个异常,并已解决了异常为止。 
        if( s_initException != null ) 
            throw s_initException; 
    }

  现在不管有多少个用户来访问,或者第一个访问者刷新浏览器多少次,都会看到同样的异常信息:

  说明:Global.asax的这个问题在IIS7以上版本的集成模式下并不存在。

  还有哪些初始化方法?

  除了Global.asax中的Application_Start,还有哪些方法可以在ASP.NET程序执行初始化的任务呢?

  目前我知道的还有另三种方法:

  1、App_Code中的AppInitialize方法。

  2、写个专用的HttpModule。

  3、ASP.NET 4.0的PreApplicationStartMethodAttribute

  App_Code中的AppInitialize方法

  ASP.NET允许我们在App_Code中的任何一个类型定义一个AppInitialize方法,用它也能执行初始化的任务。

    public class Class1 
    { 
        public static void appInitialize() 
        { 
            AppInitializer.Init();         
        } 
    }

  如果我此时再次运行示例程序(已注释掉Global.asax中的代码),会看到以下显示:

  显然,我们期望的初始化代码确实被调用了。

  这个AppInitialize方法有什么限制呢?