ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-上 )

ConfigSections的结构



首先我们先回顾一下ConfigSections的结构和它子节点的说明,如下:

   1:  <configSections>
   2:        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   3:          <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   4:            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
   5:                     requirePermission="false" allowDefinition="MachineToApplication"/>
   6:            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
   7:              <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
   8:                       requirePermission="false" allowDefinition="Everywhere" />
   9:              <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
  10:                       requirePermission="false" allowDefinition="MachineToApplication" />
  11:              <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
  12:                       requirePermission="false" allowDefinition="MachineToApplication" />
  13:              <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
  14:                       requirePermission="false" allowDefinition="MachineToApplication" />
  15:            </sectionGroup>
  16:          </sectionGroup>
  17:        </sectionGroup>
  18:      </configSections>  

 

ConfigSectins属性和子节点说明    



属性:

无。

子节点说明:


节点名称


功能描述


sectionGroup


定义配置节处理程序与配置之间的关联。


section


定义配置节处理程序与配置元素之间的关联。

我们不难发现ConfigSectings主要包含SectiongGroup和Section两个子节点,下面就介绍一下这两个节点的属性说明:

1、sectionGroup属性说明

 



属性名称


功能描述


name


指定与下面 type 属性指定的配置节处理程序关联的配置节或元素的名称。


type


指定用来执行如下操作的配置节处理程序类的名称:处理在 name 属性中指定的节或元素中的配置设置。使用以下格式:

type=" Fully qualified class name , assembly file name , version , culture , public key token ",定义必须匹配程序集引用。

程序集文件必须与定义它的 Web.config 文件位于同一个应用程序目录中。

SectionGroup中还是可以在包含多个SectionGroup和Section。

2、section属性说明



属性名称


功能描述


name

指定与 type 属性中指定的配置节处理程序关联的配置节或元素的名称。

type

指定用来执行如下操作的配置节处理程序类的名称:处理在 name 属性中指定的节或元素中的配置设置,格式和上面sectionGroup属性中的type格式相同。

requirePermission

指定是否得到相关的配置部分要求存取权限信息。可选的 Boolean 属性。

restartOnExternalChanges


指定在该节的配置数据发生更改时是否应当重新启动应用程序,不适用于 ASP.NET 应用程序,可选的 Boolean 属性。


allowLocation


指定是否可以在 location 元素内使用该节,仅适用于 ASP.NET 应用程序,默认值为 True。


allowExeDefinition


指定可以在哪个配置文件中使用该节,仅适用于 .NET Framework 客户端应用程序,可选的 Boolean 属性。


allowDefinition


指定可以在哪个配置文件中使用该节,仅适用于 ASP.NET 应用程序,可选的 Boolean 属性。

其实在配置allowDefinition和allowExeDefinition属性的时候,他们其实是有选择值的。allowDefinition的值是在ConfigurationAllowDefinition 枚举中选择,

而allowExeDefinition的值是在ConfigurationAllowExeDefinition 枚举中选择。下面就介绍一下这两个枚举中各个值的的介绍:

1、ConfigurationAllowDefinition 枚举




描述


Everywhere


允许在任何配置文件或目录中配置该节,如下所示:

  • Machine.config。
  • 根 Web.config。
  • 应用程序的 Web.config。
  • 虚拟目录。
  • 应用程序中的物理子目录。

如果未使用 allowDefinition 属性,则假设为 Everywhere。这是默认设置。


MachineToApplication


允许在下列文件之一中配置该节:

  • Machine.config。
  • 根 Web.config。
  • 应用程序的 Web.config。

这不包括位于应用程序中的虚拟目录或物理子目录下的 Web.config 文件。


MachineToWebRoot


允许在下列文件之一中配置该节:

  • Machine.config。
  • 根 Web.config。

MachineOnly


只允许在 Machine.config 文件中配置该节。

注释:

Machine.config的位置:%SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG 中。

根 Web.config的位置:%SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG 中。

2、ConfigurationAllowExeDefinition 枚举




描述


MachineToApplication


可在 Machine.config 文件或客户端应用程序目录中的 Exe.config 文件中定义 ConfigurationSection。


MachineToRoamingUser


可在 Machine.config 文件、客户端应用程序目录中的 Exe.config 文件、漫游用户目录中的 User.config 文件或本地用户目录中的 User.config 文件中定义 ConfigurationSection。


MachineToLocalUser


可在 Machine.config 文件、客户端应用程序目录中的 Exe.config 文件或漫游用户目录中的 User.config 文件中定义 ConfigurationSection


MachineOnly


ConfigurationSection 只能在 Machine.config 文件中定义。

举例说明



上面介绍了这么多,下面就用两个简单的Demo程序来介绍一下他们的具体应用吧:

1、Demo01介绍section的应用。

2、Demo02介绍包括子元素section的应用。

Demo01介绍一个配置用户信息的Section

以下代码是Section的结构和属性的定义。

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:   
   6:  using System.Configuration;
   7:   
   8:  namespace KevinDiao.MySectionDemo01
   9:  {
  10:      /// <summary>
  11:      /// 自定义Section的结构
  12:      /// </summary>
  13:      public class MySection:ConfigurationSection
  14:      {
  15:          /// <summary>
  16:          /// 用户名称
  17:          /// </summary>
  18:          [ConfigurationProperty("username",IsRequired=true)]
  19:          public string UserName
  20:          {
  21:              get
  22:              {
  23:                  return (string)this["username"];
  24:              }
  25:              set
  26:              {
  27:                  this["username"] = value;
  28:              }
  29:          }
  30:          /// <summary>
  31:          /// 用户密码
  32:          /// </summary>
  33:          [ConfigurationProperty("password", IsRequired = true)]
  34:          public string Password
  35:          {
  36:              get
  37:              {
  38:                  return (string)this["password"];
  39:              }
  40:              set
  41:              {
  42:                  this["password"] = value;
  43:              }
  44:          }
  45:      }
  46:  }

下面介绍时简单的获取程序:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Web;
   5:  using System.Web.UI;
   6:  using System.Web.UI.WebControls;
   7:   
   8:  using System.Configuration;
   9:  using KevinDiao.MySectionDemo01;
  10:   
  11:  namespace KevinDiao.AspNetDemo01
  12:  {
  13:      public partial class _Default : System.Web.UI.Page
  14:      {
  15:          protected void Page_Load(object sender, EventArgs e)
  16:          {
  17:              MySection mySection = (MySection)ConfigurationManager.GetSection("MySectionHandle01");
  18:              Response.Write("UserName:"+mySection.UserName+"<br/>");
  19:              Response.Write("Password:"+mySection .Password);
  20:          }
  21:      }
  22:  }

web.config中的配置信息

   1:  <configSections>
   2:    <section name="MySectionHandle01"    type="KevinDiao.MySectionDemo01.MySection,KevinDiao.MySectionDemo01"/>
   3:   </configSections>
   4:   <MySectionHandle01 username="kevindiao" password="123456"></MySectionHandle01>

获取到的结果:

UserName:kevindiao
Password:123456

Demo02还是用用户信息来举例吧,以下是具有的代码:

以下是自定义Section的结构:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:   
   6:  using System.Configuration;
   7:   
   8:  namespace KevinDiao.MySectionDemo02
   9:  {
  10:      /// <summary>
  11:      /// 自定义Section
  12:      /// </summary>
  13:      public class MySectionHandle:ConfigurationSection
  14:      {
  15:          [ConfigurationProperty("users",IsRequired=true)]
  16:          public MySectionElement Users
  17:          {
  18:              get
  19:              {
  20:                  return (MySectionElement)this["users"];
  21:              }
  22:          }
  23:      }
  24:  }

自定义Element:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:   
   6:  using System.Configuration;
   7:   
   8:  namespace KevinDiao.MySectionDemo02
   9:  {
  10:      /// <summary>
  11:      /// 自定义Element
  12:      /// </summary>
  13:      public class MySectionElement : ConfigurationElement
  14:      {
  15:          /// <summary>
  16:          /// 用户名
  17:          /// </summary>
  18:          [ConfigurationProperty("username", IsRequired = true)]
  19:          public string UserName
  20:          {
  21:              get
  22:              {
  23:                  return (string)this["username"];
  24:              }
  25:          }
  26:          /// <summary>
  27:          /// 密码
  28:          /// </summary>
  29:          [ConfigurationProperty("password", IsRequired = true)]
  30:          public string Password
  31:          {
  32:              get
  33:              {
  34:                  return (string)this["password"];
  35:              }
  36:          }
  37:      }
  38:  }

读取页面:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Web;
   5:  using System.Web.UI;
   6:  using System.Web.UI.WebControls;
   7:   
   8:  using System.Configuration;
   9:  using KevinDiao.MySectionDemo01;
  10:  using KevinDiao.MySectionDemo02;
  11:   
  12:  namespace KevinDiao.AspNetDemo01
  13:  {
  14:      public partial class _Default : System.Web.UI.Page
  15:      {
  16:          protected void Page_Load(object sender, EventArgs e)
  17:          {
  18:             
  19:   
  20:              MySectionHandle mySectionHandle = (MySectionHandle)ConfigurationManager.GetSection("MySectionHandle02");
  21:              Response.Write("username:"+mySectionHandle .Users .UserName+"<br/>");
  22:              Response.Write("password:" + mySectionHandle.Users.Password + "<br/>");
  23:   
  24:          }
  25:      }
  26:  }

web.config中的配置信息

   1:  <configSections>
   2:      <section name ="MySectionHandle02" type="KevinDiao.MySectionDemo02.MySectionHandle,KevinDiao.MySectionDemo02"/>
   3:     </configSections>
   4:   
   5:    <MySectionHandle02>
   6:      <users username="kevin" password="123"></users>
   7:    </MySectionHandle02>

获取的的结果:

username:kevin 
password:123

今晚就先到这里了,下一篇我们在讨论一下SectionGroup、SectionCollection等的应用,最后在介绍个案例,加深大家的理解和在具体的项目中的应用。

REFERENCE FROM : http://www.cnblogs.com/diaojia/archive/2011/03/29/1998280.html

时间: 2024-11-06 09:45:34

ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-上 )的相关文章

ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-下)

还是接着上一篇说起,在上两篇中主要和大家探讨了ConfigSection的几种常用形式,并举例几个例子说明了一下.其实它们主要都是继承System.Configuration.ConfigurationSection类来创建自定义配置节.其实在.Net Framework 1.0和1.1的时候,我们是实现System.Configuration.IConfigurationSectionHandler接口来创建自定义配置节,现在微软已经不建议这样使用了,如果有兴趣的朋友可以看看这个<使用 ICo

ASP.NET杂谈-一切都从web.config说起(2)(ConfigSections详解-中)

我们就接着上一篇继续说,上一篇中介绍了ConfigSection的结构和两个简单的DEMO,本篇就说一下SectionGroup.ConfigurationElementCollection和key/value pair configurationsection. 的使用. 1.SectionGroup的使用 下面的代码简单的说明一下SectionGroup的使用: 1).首先定义一个继承ConfigurationSectionGroup的类: 1: /// <summary> 2: ///

WCF项目问题2-无法激活服务,因为它需要 ASP.NET 兼容性。没有未此应用程序启用 ASP.NET 兼容性。请在 web.config 中启用 ASP.NET 兼容性,或将 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 属性设置为 Required 以外的值。

无法激活服务,因为它需要 ASP.NET 兼容性.没有未此应用程序启用 ASP.NET 兼容性.请在 web.config 中启用 ASP.NET 兼容性,或将 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 属性设置为 Required 以外的值. 在web.config中添加 aspNetCompatibilityEnabled="true"属性即可,如下: <servi

SAE上传web应用(包括使用数据库)教程详解及问题解惑

转自:http://blog.csdn.net/baiyuliang2013/article/details/24725995 SAE上传web应用(包括使用数据库)教程详解及问题解惑:       最近由于工作需求,需利用SAE平台,但在使用过程中遇到不少问题,比如如何上传应用,上传应用完毕后打不开,mysql连接不上等等,以及云豆的计费问题,结合个人使用心得,将在本帖一一解答.       1,上传web应用首先,使用SAE平台需要注册自己的账号吧,这个就不说了,然后进入我的首页,会看到: 

SVN中基于Maven的Web项目更新到本地过程详解

环境 MyEclipse:10.7 Maven:3.1.1 概述 最近在做项目的时候,MyEclipse下载SVN上面基于Maven的Web项目总是出现很多问题,有时候搞了很半天,Maven项目还是出现叉号,最后总结了方法步骤,终于可以将出现的问题解决,在此,将重现从SVN上将基于Maven的Web项目变成本地MyEclipse中项目的过程,问题也在其中进行解决. 问题补充 在使用Myeclipse的部署Web项目的时候,在点击部署按钮的时候,没有任何反应,在此提供两种解决方法,问题如图1所示:

玩转CSS3,嗨翻WEB前端,CSS3伪类元素详解/深入浅出[原创][5+3时代]

1.博客背景 在我的上一篇博客中, 很多园友提出说对css3"画图"不是很理解, 在跟他们私聊了一段时间以后,加上自己在开始自学css3的时候的疑惑,我觉得大家之所以不是很理解主要是因为对伪元素不太了解,介于画图和CSS3里一些高大上的特效用的比较广泛的伪类元素就是::before 和 ::after, 写这篇博客主要也是为了起到一个敲门砖的作用,所以本篇博客主要是讲::before 和 ::after.那么就让我们一起来聊聊伪元素吧. 2.CSS历史 伪元素实际上在CSS1(CSS1

好程序员web前端学习路线分享Jsonp详解

好程序员web前端学习路线分享Jsonp详解,Jsonp原理: 咱们先看看POST的数据发送位置: GET的数据发送位置 那什么情况下会发生跨域呢? 当本机请求服务器上数据的时候:会发生跨域: 当本地服务器请求其他服务器数据的时候回发生跨域: 为什么要跨域呢? 同源策略:基于浏览器的安全考虑,浏览器各个厂商之间出现了一个约定,这个约定叫做同源策略.这个约定的主要内容就是,域和域之间数据不共通. 跨域的用途是什么? 当网站发展壮大到一定地步的时候,会建立很多的节点,各个节点的IP是不同的,所以跨域

asp.net夜话之十一:web.config详解

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhoufoxcn.blog.51cto.com/792419/166441 在开发中经常会遇到这样的情况,在部署程序时为了保密起见并不将源代码随项目一同发布,而我们开发时的环境与部署环境可能不一致(比如数据库不一样),如 果在代码中保存这些配置这些信息部署时需要到用户那里更改代码再重新编译,这种部署方式非常麻烦.在.net中提供了一种便捷的保存项目配置信息的办法, 那就是利用配

新手入门:史上最全Web端即时通讯技术原理详解

前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM(相关文章请参见:<IM架构篇>.<IM综合资料>.<IM/推送的通信格式.协议篇>.<IM心跳保活篇>.<IM安全篇>.<实时音视频开发>).消息推送应用(参见:<推送技术好文>)的通信原理介绍也较多