• 由Duwamish学习web.config的配置(转)


    Web.config

    [UpDate@]2004.10.31

    (1)各个标记名的命名规则:
    标记名和属性名是 Camel 大小写形式的,这意味着标记名的第一个字符是小写的,任何后面连接单词的第一个字母是大写的。属性值是 Pascal 大小写形式的,这意味着第一个字符是大写的,任何后面连接单词的第一个字母也是大写的。true 和 false 例外,它们总是小写的。

    (2)配置层次总图

    所有配置信息都驻留在 <configuration> 和 </configuration> 根 XML 标记之间。
    标记间的配置信息分为两个主区域:配置节处理程序声明区域和配置节设置区域。

    <?xml version="1.0"?> <!-- 可以不要 -->
    <configuration>
    <!-- ============= 1 =============================== !-->
    <!-- 配置节处理程序声明区域(必须放在本节点的最上) -->
     
    <configSections>
    <section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    <!-- 这个section没有放到任何命名空间分组里面  -->
      
    <sectionGroup name="system.web"> <!-- 按照命名空间分组 -->
                
    <section name="authorization" 
                    type
    ="System.Web.Configuration.AuthorizationConfigHandler, 
                    System.Web, Version=1.0.3300.0, Culture=neutral, 
                    PublicKeyToken=b03f5f7f11d50a3a"
    />            
                
    <section name="sessionState" 
                   type
    ="System.Web.SessionState.SessionStateSectionHandler,
                    System.Web, Version=1.0.3300.0, Culture=neutral,
                    PublicKeyToken=b03f5f7f11d50a3a"

                    allowDefinition
    ="MachineToApplication"/>        
             
    </sectionGroup>

     
    </configSections>
    <!-- ========= /1 ======================== -->
    <!-- =========  2 ========================  -->
    <!--  配置节设置区域 -->
    <!--  如果没有上面的配置节处理程序声明区域,但默认继承了mechine.config,所以,我们在配置<authorization>等节点的
    的时候,还是要加上它的组名称<system.web>
      
    -->
    <system.web>
            
    <authorization>
                
    <allow users="*"/> <!-- Allow all users -->
                
    <!-- Allow or deny specific users.
                allow users="[comma separated list of users]"
                      roles="[comma separated list of roles]"/>
                <deny users="[comma separated list of users]"
                      roles="[comma separated list of roles]"/>
                
    -->
            
    </authorization>
            
    <sessionState 
                
    sqlConnectionString="data source=localhost;
                   Integrated Security=SSPI;
                   Initial Catalog=northwind"

                cookieless
    ="false" 
                timeout
    ="10"/>
     
    </system.web>
    <!-- mechine.config没有分组的节点名称有:
    runtime
    mscorlib
    startup
    system.runtime.remoting
    system.diagnostics
    appSettings
    所以他们在配置的时候就少了一个层次.
    -->
    <!-- ================ /2 =========================  -->
    </configruation>


    (3)配置原理

    Example:

    在配置节处理程序声明
    <section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    这个Section的name属性表示我们要在下面的配置节设置区域对应的名称.
    type属性由指定的类来处理读取配置节设置区域的字段,其实这个type也定义了我们在配置节设置区域的配置格式.我们姑且把这种格式成为 名称/值对.

    就这个type而言,上面例子的配置设置格式是:
    <appSettings>
     <add key="name" value="caca"/>
     <add key="email" value="licunqing@gmail.com"/>
    </appSettings>

    我们可以这样读取key的value
    string myname=System.Configuration.ConfigurationSettings.AppSettings["name"];
    也可以读取所有的key的value返回一个集合
    NameValueCollection config=(NameValueCollection)System.Configuration.ConfigurationSettings.GetConfig["appSettings"];
    string myname=config["name"];
    string myemail=config["email"];

    所以,我们可以建立自己的type,至于相应的配置节设置区域的格式,我们这里还用System.Configuration.NameValueFileSectionHandler的形式.
    来看看duwamish中的的例子
    其配置节声明区域有一个自定义的Type类型:
    <section name="DuwamishConfiguration" type="Duwamish7.Common.DuwamishConfiguration, Duwamish7.Common" />

    其相应的配置节声明格式为:

     <DuwamishConfiguration>
            <!-- Settings specific to the Duwamish application -->

            <add key="Duwamish.Web.EnablePageCache" value="True"/>
    ......
    <DuwamishConfiguration>

    显然这种配置节设置格式就是上面提到的 名称/值对的格式.

    看来这个Section其本质的type类型还是System.Configuration.NameValueFileSectionHandler.

    看看Duwamish7.Common.DuwamishConfiguration
     public class DuwamishConfiguration : IConfigurationSectionHandler
    {
     
    //这里简化了原代码
     public Object Create(Object parent, object configContext, XmlNode section)
            
    {
                
                NameValueCollection settings;

             NameValueSectionHandler baseHandler 
    = new NameValueSectionHandler();
                    settings 
    = (NameValueCollection)baseHandler.Create(parent, configContext, section);

                
    return settings;
            }


    }

    确实,其本质就是NameValueSectionHandler,Duwamish7.Common.DuwamishConfiguration调用它,返回调用它的结果而已.
    但是,我们这里可以加一些自己的东西,从而很好的控制它,比如在Duwamish中,实现如果节点配置域没有设置那些key 以及对应的value,就让他返回一个默认值。(参见Duwamish7.Common.DuwamishConfiguration)

    [增加修改中......]
    ===========
    参考:
    全部信息请search MSDN:ASP.NET 配置系统 / 配置文件架构
    另外看看Duwamish的源代码
    http://www.microsoft.com/china/community/program/originalarticles/TechDoc/duwamish_con.mspx

    原文转自http://www.cnblogs.com/caca/archive/2004/09/23/46091.aspx

  • 相关阅读:
    Java常用的函数式接口
    Java网络编程的使用
    Java 多线程的使用
    VB.NET_DBUtil
    java 文件操作与IO流的常用方法
    JAVA Excel.xlsx 上传于下载
    java测试类
    Java11 HashMap源码分析(一、文档翻译)
    Canal实现Redis缓存实时更新(二)
    Canal实现Redis缓存实时更新(一)
  • 原文地址:https://www.cnblogs.com/dagon007/p/116021.html
Copyright © 2020-2023  润新知