每个程序都需要初始化的过程,用来读取配置或者设置一些运行环境(变量),对于ASP.NET程序来说,又该在哪里执行初始化的任务呢?

  我想应该绝大多数人都知道在Global.asax中执行初始化的过程,然而有些细节是我们需要关注的。

  本文用例

  在这篇博客的示例代码中,AppInitializer包含了网站的初始化的实现代码:

    public static class AppInitializer 
    { 
        public static ConnectionStringSettings MyNorthwindConnectionSetting { get; private set; } 
        public static void Init() 
        { 
            // 读取连接字符串。
            LoadConnectionString(); 
            // 设置SQLSERVER缓存依赖通知。
            SetSqlDependency(); 
            // 其它的初始化操作。
            OthersInit(); 
        } 
        static void LoadConnectionString() 
        { 
            ConnectionStringSettings setting = ConfigurationManager.ConnectionStrings["MyNorthwind"]; 
            if( setting == null ) 
                throw new ConfigurationException("没有配置MyNorthwind连接字符串。"); 
            if( string.IsNullOrEmpty(setting.ConnectionString) ) 
                throw new ConfigurationException("没有为MyNorthwind连接字符串指定内容。"); 
            if( string.IsNullOrEmpty(setting.ProviderName) ) 
                throw new ConfigurationException("没有为MyNorthwind连接字符串指定ProviderName 。"); 
            // 保存读取到的连接字符串,供程序使用。
            MyNorthwindConnectionSetting = setting; 
        } 
        static void SetSqlDependency() 
        { 
            // 判断SQLSERVER版本是否为 2005以上版本,
            // 是否开启Service Broker的检查代码不列出了。
            SqlDependency.Start(MyNorthwindConnectionSetting.ConnectionString); 
        } 
        static void OthersInit() 
        { 
            // 其它的初始化操作。
            // 例如:
            // 1. 加载必要的缓存数据。
            // 2. 检查上传目录是不存在。
            // 3. ...................
        } 
    }

  这段代码的意图很清楚,一定要确保正确的配置了数据库连接字符串,否则以异常的形式报告出来。

  示例程序还有一个页面,Default.aspx

    <body>
        <form id="form1" runat="server">
        <div>
            <h1>User Login</h1>
        </div>
            <p style="line-height: 150%;">
                UserName: <asp:TextBox ID="txtUserName" runat="server" Width="200px" Text="Fish Li"></asp:TextBox><br />
                Password: <asp:TextBox ID="txtPassword" runat="server" Width="200px" TextMode="Password"></asp:TextBox><br />
                <asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
            </p>
        </form>
    </body>

  其实是一个登录页面,后台代码为:

    protected void btnLogin_Click(object sender, EventArgs e) 
    { 
        bool ok = false; 
        using( SqlConnection connection 
            = new SqlConnection(AppInitializer.MyNorthwindConnectionSetting.ConnectionString) ) { 
            connection.Open(); 
            // 其它的数据库操作。
            ok = true; 
        } 
        if( ok ) 
            Response.Redirect("Default2.aspx"); 
    }