Enterprise Library: Configuration Application Block应用向导篇, Part 3

Enterprise Library: Configuration Application Block应用向导篇

Part 3

Written by: Rickie Lee (rickieleemail#yahoo.com)

My blog: www.cnblogs.com/rickie


Enterprise Library: Configuration Application Block应用向导篇, Part 1

Enterprise Library: Configuration Application Block应用向导篇, Part 2
******
(3)读取配置信息

使用Configuration Application Block最常用的方式是读取配置数据,如下Code Snippet演示应用程序如何读取Proxy配置信息到上述定义的ProxySettingsData类中。应用程序使用ConfigurationManager.GetConfiguration静态方法来检索配置信息。

              private void btnReadConfigurationInfo_Click(object sender, System.EventArgs e)

              {

                     // Using the static method, read the cached configuration settings

                     ProxySettingsData configData = ConfigurationManager.GetConfiguration("ProxySettings") as ProxySettingsData;

 

                     StringBuilder results = new StringBuilder();           

                     results.Append("Configuration settings:");

                     results.Append(Environment.NewLine);

                     results.Append('\t');

                     results.Append(configData.ToString());

                     results.Append(Environment.NewLine);

 

                     txtConfigurationData.Text += results.ToString();

              }

默认情况下,上述Configuration Console配置工具生成的ProxySettingsConfiguration.config为空白配置文件,没有包含任何配置信息。此时,如果读取配置信息,会抛出如下异常:

An unhandled exception of type 'System.Configuration.ConfigurationException' occurred in microsoft.practices.enterpriselibrary.configuration.dll

Additional information: The section name 'ProxySettings' could not be found in the Xml file D:\Temp\DemoCAB\bin\Debug\ProxySettingsConfiguration.config.

因此,需要先将配置信息写入ProxySettingsConfiguration.config配置文件,可以手工输入,也可通过如下程序代码自动写入配置信息。

 

4)写配置信息

如下是ProxySettingsConfiguration.config配置文件:

<?xml version="1.0" encoding="utf-8"?>

<ProxySettings>

  <xmlSerializerSection type="DemoCAB.ProxySettingsData, DemoCAB, Version=1.0.1862.33265, Culture=neutral, PublicKeyToken=null">

    <ProxySettingsData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

      <ProxyServer>proxy server</ProxyServer>

      <Port>8080</Port>

    </ProxySettingsData>

  </xmlSerializerSection>

</ProxySettings>

元素<ProxySettings>与上述Configuration Console配置工具的Configuration Section名称一致,元素<xmlSerializerSection>包含type属性,该属性值DemoCAB.ProxySettingsData, DemoCAB, Version=1.0.1862.33265, Culture=neutral, PublicKeyToken=null 为配置信息反序列化时所用对象的全名称,反序列化对象为ProxySettingsData类型,配置信息以XML形式存放。

 

当你使用Configuration Application Block写配置数据时,上述定义的类ProxySettingsDataRuntime时实例化,将保存有配置数据。当你准备写数据时,传递ProxySettingsData对象到ConfigurationManager.WriteConfiguration方法,将配置数据写入XML配置文件。Code Snippet如下所示:

              private void btnWriteConfigurationInfo_Click(object sender, System.EventArgs e)

              {

                     ProxySettingsData configData = new ProxySettingsData();

 

                     configData.ProxyServer = txtProxyServer.Text.Trim();

                     configData.Port = Convert.ToInt32(txtPort.Text.Trim());

                     // Write the new configuration data to the XML file

                     ConfigurationManager.WriteConfiguration("ProxySettings", configData);

              }

 

5)缓存配置信息

ConfigurationBuilder类用来返回存储区中当前配置设置。基于性能的考虑,当每一个配置节信息从存储区读取后,ConfigurationBuilder将缓存该配置信息。只要缓存信息与底层存储区数据保持一致,缓存信息将返回给应用程序。当Storage Provider检测到配置设置发生变化时,它将触发一个事件,表示该配置节发生了变化。当ConfigurationBuilder接受到该事件时,将从缓存中清除该配置节信息。这样,在应用程序下次尝试读取该节配置信息时,ConfigurationBuilder将从存储区直接读取新的配置信息。

 

当使用XML文件的Storage Provider时,从配置文件发生改变到检测到该改变大约存在1500毫秒的延迟。ConfigurationChangeFileWatcher对象每1500毫秒轮询XML配置文件的变化,这不是一个可配置的设置。不过,你可以通过修改ConfigurationChangeFileWatcher源代码来改变轮询的频率。

另外,Client端程序也可以通过调用ConfigurationManager.ClearSingletonCache方法来清除缓存。

Code Snippet如下所示:

              private void btnClearCache_Click(object sender, System.EventArgs e)

              {

                     // Removes all sections from the internal cache.

                     ConfigurationManager.ClearSingletonSectionCache();

                    

                     txtConfigurationData.Text += "The cache of configuration data has been cleared." + Environment.NewLine;

              }

 

***

作者:Rickie Lee (rickieleemail#yahoo.com)

本文参考Enterprise Library, Configuration Application Block文档。

 

References:

1. Enterprise Library, Configuration Application Block

2. Rickie, Microsoft patterns & practices Enterprise Library January 2005 [中文稿], http://www.cnblogs.com/rickie/archive/2005/01/30/99443.html

3. Rickie, Enterprise Library released! http://www.cnblogs.com/rickie/archive/2005/01/29/99106.html

 

posted @ 2005-02-10 12:20  Rickie  阅读(4498)  评论(1编辑  收藏  举报