本文由中国C#技术学习中心整理 如果你对本文有不明之处请到技术论坛讨论!
可扩展的基础结构是 ASP.NET 配置系统的一大特色,该基础结构使您可以在最初部署 ASP.NET 应用程序时定义配置设置,以便可以随时添加或修改这些配置设置,同时对运作着的 Web 应用程序和服务器产生的影响也将被减至最小。
ASP.NET 配置系统提供以下好处:
配置信息存储在基于 XML 的文本文件中。您可以使用任何标准的文本编辑器或 XML 分析器来创建和编辑 ASP.NET 配置文件。
多个配置文件(名称都是 Web.config)可以出现在 ASP.NET Web 应用程序服务器上的多个目录中。每个 Web.config 文件都将配置设置应用于它自己的目录和它下面的所有子目录。子目录中的配置文件可以提供除从父目录继承的配置信息以外的配置信息,子目录配置设置可以重写或修改父目录中定义的设置。名为 systemroot\Microsoft.NET\Framework\versionNumber\CONFIG\Machine.config 的根配置文件提供整个 Web 服务器的 ASP.NET 配置设置。
在运行时,ASP.NET 使用分层虚拟目录结构中 Web.config 文件提供的配置信息为每个唯一的 URL 资源计算一组配置设置。然后缓存结果配置设置,以供所有后面的对资源的请求使用。请注意,继承是由传入请求路径 (URL) 定义的,而不是到磁盘上资源的文件系统路径(物理路径)定义的。
ASP.NET 检测对配置文件的更改并自动将新配置设置应用于受该更改影响的 Web 资源。不需要重新启动服务器让更改生效。只要层次结构中的配置文件被更改,就将自动重新计算并重新缓存分层配置设置。 节例外。
ASP.NET 配置系统是可以扩展的。您可以定义新配置参数并编写配置节处理程序以对它们进行处理。
ASP.NET 通过配置 Internet 信息服务 (IIS) 防止对配置文件的直接浏览器访问来保护配置文件不受外部访问。向任何试图直接请求配置文件的浏览器返回 HTTP 访问错误 403(禁止)。
ASP.NET 资源的配置信息包含在一组配置文件中,每个文件都名为 Web.config。每个配置文件都包含 XML 标记和子标记的嵌套层次结构,这些标记带有指定配置设置的属性。因为这些标记必须是格式正确的 XML,所以标记、子标记和属性是区分大小写的。标记名和属性名是 Camel 大小写形式的,这意味着标记名的第一个字符是小写的,任何后面连接单词的第一个字母是大写的。属性值是 Pascal 大小写形式的,这意味着第一个字符是大写的,任何后面连接单词的第一个字母也是大写的。true 和 false 例外,它们总是小写的。
所有配置信息都驻留在 和 根 XML 标记之间。标记间的配置信息分为两个主区域:配置节处理程序声明区域和配置节设置区域。
配置节处理程序声明出现在配置文件顶部 和 标记之间。包含在
标记中的每个声明都指定提供特定配置数据集的节的名称和处理该节中配置数据的 .NET Framework 类的名称。
配置节设置区域位于 区域之后,它包含实际的配置设置。 区域中的每个声明都有一个配置节。每个配置节都包含子标记,这些子标记带有包含该节设置的属性。
下面的 Web.config 文件示例声明两个配置 处理程序。一个管理应用程序设置,另一个管理会话状态。
type="System.Configuration.NameValueFileSectionHandler,
System, Version=1.0.3300.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
type="System.Web.SessionState.SessionStateSectionHandler,
System.Web, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
allowDefinition="MachineToApplication"/>
您只需要声明配置节处理程序一次。您可以将其放置在服务器的根 Machine.config 文件中或包含 Web 应用程序文件的虚拟目录的 Web.config 文件中。子目录中的配置文件自动继承父目录中声明的配置处理程序。有关更多信息,请参见配置继承。
配置设置在节分组标记下经常嵌套在一起。这些顶级节标记通常表示配置设置应用到的命名空间。例如,顶级 标记表示网络类的设置, 标记表示 ASP.NET 类的设置。
配置 设置
通过使用具有适当的 path 属性的 标记,可以将配置设置应用于特定的资源。path 属性可用于标识对其应用唯一配置设置的特定的文件或子目录。
例如,下面的配置文件在三个级别指定设置:
应用于当前目录和所有子目录的设置(全部内容包含在顶部 标记中)。
应用于 Sub1 子目录的设置(全部内容包含在 标记中,路径属性设置为 Sub1)。
应用于 Sub2 子目录的设置(全部内容包含在 标记中,路径属性设置为 Sub2)。
访问 ASP.NET 配置设置
您可以从 ASP.NET 应用程序使用 ASP.NET 公开的内部静态方法来访问公共配置设置。例如,若要读取 节 cookieless 属性的值,您可以使用下面的代码行。
[Visual Basic]
Dim nocookies As Boolean = Session.IsCookieless
[C#]
bool nocookies = Session.IsCookieless;
可以使用 ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件顶级 节中存储的应用程序特定的设置。例如:
[Visual Basic]
Dim dsn As String = ConfigurationSettings.AppSettings("dsn")
[C#]
String dsn = ConfigurationSettings.AppSettings["dsn"];
创建新的配置节
您可以用自己的 XML 配置标记扩展标准的 ASP.NET 配置设置集。若要完成该操作,您必须创建自己的配置节处理程序。该处理程序必须是一个实现 IConfigurationSectionHandler 接口的 .NET Framework 类。节处理程序解释并处理 Web.config 文件特定部分中 XML 标记中定义的设置并根据配置设置返回适当的配置对象。处理程序类返回的配置对象可以是任何数据结构;它不限于任何基配置类或配置格式。
下面的示例定义 IConfigurationSectionHandler 接口。
[Visual Basic]
Namespace System.Web.Configuration
Public Interface IConfigurationSectionHandler
Function Create(parent As Object, input As Object, _
node As XmlNode) As Object
End Interface
End Namespace
[C#]
namespace System.Web.Configuration
{
public interface IConfigurationSectionHandler
{
public Object Create(Object parent, Object input,
XmlNode node);
}
}
您还可以定义自己的节,该节与 节使用相同的配置处理程序。例如:
"System.Configuration.NameValueSectionHandler,System"/>
您可以读取上面的示例中定义的新配置节的值,如下:
[Visual Basic]
Dim config As NameValueCollection =
ConfigurationSettings.GetConfig("myGroup/nestedGroup/mySection")
Response.Write("The value of key_one is " & config("key_one") & "
")
Response.Write("The value of key_two is " & config("key_two") & "
")
[C#]
NameValueCollection config = (NameValueCollection)
ConfigurationSettings.GetConfig("myGroup/nestedGroup/mySection");
Response.Write("The value of key_one is " + config["key_one"] + "
");
Response.Write("The value of key_two is " + config["key_two"] + "
");
联系客服