由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

 

  

posted @ 2004-09-23 23:47 卡卡 ^ cacard 阅读(10780) 评论(10)  编辑 收藏 所属分类: ASP.NET

  回复  引用    
#1楼 2005-01-13 10:03 | help [未注册用户]
我想读取web.config里面授权用户的角色
例如
<allow users="aa,bb" roles="admin"/>
请问怎么读取?
  回复  引用    
#2楼 2005-04-11 11:17 | 新手 [未注册用户]
谢谢,您的提示。

新手刚学。。。

支持。。。
  回复  引用    
#3楼 2005-06-02 16:38 | duhqin [未注册用户]
ok
  回复  引用    
#4楼 2005-08-09 23:48 | xue [未注册用户]
不错
  回复  引用    
#5楼 2005-09-19 16:10 | me [未注册用户]
我想读取web.config里面授权用户的角色
例如
<allow users="aa,bb" roles="admin"/>
请问怎么读取?
--------------------------------------------------------------
这个不能直接读取,需要实现IPrincibal和IIdentity接口,应该说这是一个非常重要的特殊
  回复  引用    
#6楼 2005-12-28 10:49 | weiwen [未注册用户]
hhcril
  回复  引用    
#7楼 2006-09-20 16:29 | 百本精微 [未注册用户]
Duwamish7 的企业级框架开发,是一种很好的分层开发的方法论,尽管微软在编写Duwamish7时,使

用的是 VS 2003,但是这种分层思想在 VS 2005 中依然适用,只不过是代码的升级替换而已。本人通过近

半年的时间深入研究 Duwamish7,通过学习,自己的水平提高很快,同时,感到现在对于Duwamish7的学

习资料虽然很多,但是有提壶灌顶、从始至终,由浅入深的讲解课程不多,基于现状,我采用重现的方式

对Duwamish7 进行了一系列的讲解,重现该示例的设计分析过程,编写代码过程,在重现的过程中讲解示

例中的难点和设计思路。视频讲解是指采用屏幕录象技术,记录下我在计算机上的操作画面并配以同步的

语音讲解,从Duwamish7所具备的最初功能,到最后完全实现其所具备的所有功能。
在 www.leoon.com/asp.id=15 下,有一个本套讲解课程中的视频文件,该视频文件讲述的是

Duwamish7的框架搭建,因为Duwamish7是分层设计的,每一层其实就是一个程序集,这是理解Duwamish7

的最关键一个概念,同时那里还有整套视频讲解的目录。整套视频文件的播放时间有40多个小时,这里面

融会了我将近半年的心血。本视频出售的思路是如果您感兴趣,可以从www.leoon.com/asp.id=15中下载

免费视听的视频文件,如果这种讲解方式符合您的胃口,可以给我汇款,我收到后把视频文件刻盘后给您

邮寄过去。联系方式:Email:zxwyyz@yahoo.com.cn MSN:zxwyyz@yahoo.com.cn 每晚8:00-11:00

汇款地址:天津市河西区郁江道景观花园26-4-302 张晓伟收
注明:购买Duwamish7 视频
  回复  引用  查看    
#8楼 2007-04-13 17:38 | MSDI      
搞起推销拉。
  回复  引用    
#9楼 2007-05-08 09:43 | sanlang [未注册用户]
真的不错,学到了很多东西,谢谢



This is footer