ASP.NET 配置管理
• ASP.NET 2.0 配置管理概述
配置管理概述
可以配置整个服务器、ASP.NET 应用程序或应用程序子目录中的单个页
可以配置的功能包括身份验证的模式、页面缓存、编译器选项、自定义错误、调试和跟踪选项以及更多。
l 配置文件
• ASP.NET配置数据存储在XML文本文件中
• 每一个XML文本文件都命名为Web.config
• 所有的ASP.NET 配置信息都驻留在Web.config 文件中的configuration 元素中
整个服务器的Web.Config位置在:
:/%WinDir%/Microsoft.NET/Framework/[版本号]/CONFIG
l 配置节处理程序声明
– 在Web.config 文件中的configSections 元素中
– configSections必须是configuration的第一个子元素
l 配置节设置
– 位于配置节处理程序声明区域之后,它包含实际的配置设置。
– 可以包含子元素,这些子元素与其父元素由同一个节处理程序处理。
l 继承性
• ASP.NET配置是可继承的
• 每个Web.config 文件都将配置设置应用于它所在的目录以及它下面的所有子目录
• 子目录中的设置可以重写或修改父目录中指定的设置
• 可以将Web.config 文件中的配置设置应用于个别文件或子目录
【代码分析】
假设存在目录结构/root/SubFolder1:
Root文件夹的Web.Config:
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<section name="MSDNConfiguration" type="MyConfigSectionHandler.MSDNConfig, MyConfigSectionHandler, Version= 1.0.0 .0, Culture=neutral, PublicKeyToken=null" allowLocation="true" allowDefinition="Everywhere"/>
<section name="myCustomSection" type="MyConfigSectionHandler.MyHandler, MyConfigSectionHandler, Version= 1.0.0 .0, Culture=neutral, PublicKeyToken=null" allowLocation="true" allowDefinition="Everywhere" />
</configSections>
<!--省略-->
<location path="SubFolder1" allowOverride="true">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="SubFolder1/Default.aspx">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
</configuration>
SubFolder1文件夹下的Web.Config:
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
虽然在root文件夹下禁止任何用户访问SubFolder1,但是由于SubFolder1的Web.Config配置优先级高于其父文件夹,所以还是可以访问的。
不过如果在节点<location path="SubFolder1/Default.aspx">下设置<deny users="*"/>,那么这个具体的页面Default.aspx还是不能访问的
• ASP.NET 2.0 配置管理新增功能介绍
l 配置管理新增功能介绍
• ASP.NET MMC 管理单元
– 可视化的配置工具
– 可配置全局、网站和应用程序
– 要求本机的管理员权限
【注解】ASP.NET MMC管理单元可视化修改全局或者具体应用程序的web.config,需要本机的管理员权限
l 网站管理工具
– 使用Web浏览器管理站台
– 在本地和远程都可进行操作
– 需要网站的管理权限
– 无需本机的管理员权限
【注解】允许以网络形式管理应用程序,但是功能相对较少,主要是从安全功能考虑的,不过需要网站的管理权限。启动方法:站点-asp.net管理
对网站具有管理权限的任何人都可以使用网站管理工具来管理该网站的配置设置。网站管理工具旨在为各个网站中最常用的配置设置提供一个用户友好的图形编辑工具。由于网站管理工具使用基于浏览器的界面,因此它允许您远程更改网站设置,这对于管理已经部署到成品 Web 服务器的站点(如承载的网站)非常有用。
网站管理工具与 ASP.NET MMC 管理单元在若干方面存在不同。例如,ASP.NET MMC 管理单元最适于管理员级别的配置,因为它提供对 Web 服务器上的整个配置文件层次结构的访问,而不是提供对单个网站的配置设置的访问。此外,您还必须是管理员才能使用 ASP.NET MMC 管理单元,而网站管理工具只允许各个网站所有者在他们具有管理权限的站点的根目录中配置 Web.config 文件。最后,您不能使用 ASP.NET MMC 管理单元来远程管理 IIS,但是,网站管理工具的浏览器界面允许远程配置 IIS 6.0 和更高版本的 IIS。
网站管理工具包括一个选项卡式界面,该界面在下列选项卡上对相关的配置设置进行分组:
“安全”选项卡,其中包含有助于保护 Web 应用程序资源并管理用户帐户和角色的设置。
“配置文件”选项卡,其中包含用来管理网站如何收集访问者信息的设置。
“应用程序”选项卡,其中包含用来管理影响 ASP.NET 应用程序的配置元素的设置。
“提供程序”选项卡,其中包含用来添加、编辑、删除、测试或分配应用程序提供程序的设置。
l 查看配置架构和默认设置
– %SystemRoot%/Microsoft .NET/Framework/versionNumber/CONFIG 目录下
– Machine.config.comments
– Web.config.comments
– 包含默认设置和有用注释的列表
–
• ASP.NET 2.0 配置API
• 配置类和命名空间
– System.Configuration 命名空间
– System.Configuration.Configuration 类
– System.Web.Configuration 命名空间
– System.Web.Configuration.WebConfigurationManager 类
【代码分析】
• 如何读取当前Web应用程序的继承设置?
Configuration config = WebConfigurationManager.OpenWebConfiguration("/VS2005Demo8");
config.SaveAs("c://MyApp.web.config", ConfigurationSaveMode.Full, true);
[注解] ConfigurationSaveMode有三种模式:Full、Minimal和Modified(保存修改后的)
• 如何读取应用程序设置?
this.Label1.Text = WebConfigurationManager.AppSettings["myApp"].ToString();
• 如何读取连接字符串?
。。。WebConfigurationManager.ConnectionStrings["AdventureWorksConnectionString"]
• 如何读取任一节点的值?
string configPath = "/VS2005Demo8";
Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath);
CompilationSection section = (CompilationSection)config.GetSection("system.web/compilation");
StringBuilder compilation = new StringBuilder();
compilation.Append("debug: ");
compilation.Append(section.Debug.ToString());
[注解] 节点要区分大小写
• 如何使用IconfigurationSectionHandler 创建自定义配置节?(asp.net1.0/1.1)
• 如何使用ConfigurationSection 创建自定义配置节?
详细步骤请阅:在ASP.NET1.X和ASP.NET2.0中如何创建自定义配置节
以下是上面要用的部分配置文件
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<!--MyConfigSectionHandler.MSDNConfig:节点的处理程序-->
<!--MyConfigSectionHandler:程序集-->
<section name="MSDNConfiguration" type="MyConfigSectionHandler.MSDNConfig, MyConfigSectionHandler, …/>
<section name="myCustomSection" type="MyConfigSectionHandler.MyHandler, MyConfigSectionHandler, …/>
</configSections>
<MSDNConfiguration>
<add key="Ext_SvrName" value="Ben/SQL2005"/>
<add key="Ext_DBName" value="aspnetdb"/>
<add key="Ext_UID" value="sa"/>
<add key="Ext_Pwd" value=""/>
</MSDNConfiguration>
<myCustomSection myAttrib1="Clowns">
<myChildSection myChildAttrib1="Zippytest" myChildAttrib2="Michael Zawondy test "/>
</myCustomSection>
<appSettings>
<add key="myapp" value="myvalue"/>
</appSettings>
<connectionStrings>
<add name="AdventureWorksConnectionString" connectionString="Data Source=BEN/SQL2005;Initial Catalog=AdventureWorks;User ID=sa"
providerName="System.Data.SqlClient" />
<add name="LocalSqlServer" connectionString="Data Source=BEN/SQL2005;Initial Catalog=aspnetdb;User ID=sa"
providerName="System.Data.SqlClient" />
</connectionStrings>