知识大全 通过Cache实现通用的配置管理

Posted

篇首语:努力让人有了奇迹般的进步,努力可以让人有了奇迹般的成功。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 通过Cache实现通用的配置管理相关的知识,希望对你有一定的参考价值。

通过Cache实现通用的配置管理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   Net Web应用程序提供了很强大的 Web Config功能 我们很多的系统可能已经习惯在Web Config中进行配置 可是使用Web Config进行一些配置 会有一些不太顺畅的特性 比如 修改Web Config 后 Web应用程序会出现错误页面并且需要重新登录 Web Config配置过程不是很方便 即使通过安装包进行Web Config的设置 Net 安装向导能提供的入口也是有限的

  通过Cache机制实现一个通用的配置管理模块

  设计目标

   高速读取配置信息

   统一的配置维护管理方便进行配置

   新的配置模块及维护不需要再进行二次开发

  大致设计思路

   通过Cache机制对配置文件的内容进行缓存 缓存的失效依赖于配置文件

   在开发基础组件库中实现一个 CacheHelper 类统一读取配置信息

   根据配置文件自动生成配置维护界面 实现统一的配置维护

  代码参考

  CacheHelper cs  统一读取配置信息的一个类 打开配置文件 读取相关的配置信息到HashTable 并保存到 Cache中 Cache中存在则直接取Cache中的内容 否则重新读取文件 这样做到高速读取

    using System;using System Collections;using System Web;using System Web Caching;using System Xml;namespace Epower DevBase BaseTools    /// <summary>    /// ConfigHelper 的摘要说明     /// 自定义的系统参数配置文件的读取工具类    /// </summary>    public class ConfigHelper            /// <summary>        /// 取~/Config/CommonConfig xml中某个参数名对应的参数值        /// </summary>        /// <param name= ParameterName >参数名</param>        /// <returns>参数值</returns>        public static string GetParameterValue(string ParameterName)                    return GetParameterValue( EpowerConfig ParameterName);                /// <summary>        /// 取某个参数配置文件中某个参数名对应的参数值        /// 参数配置文件        ///         必须存放于 ~/Config/ 目录下面 以 xml为后缀        ///         配置格式参见~/Config/CommonConfig xml        /// </summary>        /// <param name= ConfigName >配置文件的文件名 不要后缀</param>        /// <param name= ParameterName >参数名</param>        /// <returns>参数值</returns>        public static string GetParameterValue(string ConfigName string ParameterName)                    Hashtable CommonConfig = GetConfigCache(ConfigName);            if (CommonConfig ContainsKey(ParameterName))                return CommonConfig[ParameterName] ToString();            else                throw new Exception( 参数( + ParameterName + )没有定义 请检查配置文件! );                /// <summary>        /// 将配置的参数转换成Hashtable并存入缓存 配置文件修改后自动更新缓存        /// </summary>        /// <param name= ConfigName ></param>        /// <returns></returns>        private static Hashtable GetConfigCache(string ConfigName)                    string CacheName = Config_ + ConfigName;            Hashtable CommonConfig = new Hashtable();            Cache cache = HttpRuntime Cache;            if (cache[CacheName] == null)                            string ConfigPath = null;                #region 取应用程序根物理路径                try                                    ConfigPath = HttpRuntime AppDomainAppPath;                                catch (System ArgumentException ex)                                                if (ConfigPath == null) throw new Exception( 系统异常 取不到应用程序所在根物理路径! );                #endregion                string ConfigFile = ConfigPath + Config\\\\ + ConfigName + xml ;                XmlDocument xmlDoc = new XmlDocument();                xmlDoc Load(ConfigFile);                XmlNode oNode = xmlDoc DocumentElement;                if (oNode HasChildNodes)                                    XmlNodeList oList = oNode ChildNodes;                    for (int i = ; i < oList Count; i++)                                            CommonConfig Add(oList[i] Attributes[ Name ] Value oList[i] Attributes[ Value ] Value);                                                    cache Insert(CacheName CommonConfig new CacheDependency(ConfigFile));                        else                CommonConfig = (Hashtable) cache[CacheName];            return CommonConfig;            

  代码参考

  frmConfigSet aspx 以配置文件名为参数 根据配置文件自动生成维护界面 并进行维护 保存

    HtmlTable tab = new HtmlTable();            tab ID = tDynamic ;            tab Attributes Add( width % );            tab Attributes Add( class tablebody );            HtmlTableRow tr = new HtmlTableRow();            HtmlTableCell tc = new HtmlTableCell();            XmlNodeList nodes = xmldoc DocumentElement SelectNodes( Item );            string sConfigContent = ;            if (xmldoc DocumentElement Attributes[ ConfigContent ] != null)                sConfigContent = xmldoc DocumentElement Attributes[ ConfigContent ] Value;            string sItemDesc = ;                       int iRow = ;            foreach (XmlNode node in nodes)                            iRow++;                tr = new HtmlTableRow();                tr ID = tDynamicRow + iRow;                AddControlByNode(node iRow ref tr);                AddControl(tab tr);                sItemDesc = ;                if (node Attributes[ ItemContent ] != null)                    sItemDesc = node Attributes[ ItemContent ] Value;                if (sItemDesc Length > )                                    //添加描述行                    iRow++;                    tr = new HtmlTableRow();                    tr ID = tDyContectRow + iRow;                    tc = new HtmlTableCell();                    tc ID = tDyContectTD_ + iRow;                    tc InnerText = sItemDesc;                    tc Attributes Add( class list );                    tc Attributes Add( colspan );                    AddControl(tr tc);                    AddControl(tab tr);                            

    /// <summary>        ///  获取设置的控件        /// </summary>        /// <param name= node ></param>        /// <returns></returns>        private Control GetSettingControl(XmlNode node)                    string strCtrlType = node Attributes[ ControlType ] Value;            string strValue = node Attributes[ Value ] Value;            Control control;            switch (strCtrlType ToLower())                            case text :                    control = new TextBox();                    control ID = tDynamic + _txt_ + node Attributes[ Name ] Value;                    ((TextBox)control) Width = new Unit( % );                    ((TextBox)control) Attributes Add( Tag node Attributes[ Name ] Value);                    ((TextBox)control) Text = strValue;                    break;                case checkbox :                    control = new CheckBox();                    control ID = tDynamic + _c_ + node Attributes[ Name ] Value;                    ((CheckBox)control) Attributes Add( Tag node Attributes[ Name ] Value);                    ((CheckBox)control) Text =  node Attributes[ Desc ] Value;                    if (strValue ToLower() == false )                                            ((CheckBox)control) Checked = false;                                        else                                            ((CheckBox)control) Checked = true;                                        break;                case droplist :                    control = new DropDownList();                    control ID = tDynamic + _drp_ + node Attributes[ Name ] Value;                    ((DropDownList)control) Attributes Add( Tag node Attributes[ Name ] Value);                    ((DropDownList)control) Width = new Unit( % );                    string[] sItems = node Attributes[ Dict ] Value Split( ToCharArray());                    for (int i = ; i < sItems Length; i++)                                            string[] arr = sItems[i] Split( | ToCharArray());                        ((DropDownList)control) Items Add(new ListItem(arr[ ] arr[ ]));                                        ((DropDownList)control) SelectedValue = strValue;                    break;                case datetime :                    control = (Epower ITSM Web Controls CtrDateAndTime)LoadControl( ~/controls/ctrdateandtime ascx );                   ((Epower ITSM Web Controls CtrDateAndTime)control) ShowTime = false;                    control ID = tDynamic + _date_ + node Attributes[ Name ] Value;                    ((Epower ITSM Web Controls CtrDateAndTime)control) Attributes Add( Tag node Attributes[ Name ] Value);                    break;                default:                    control = null;                    break;                        return control;        

  配置文件范例

  读取配置信息范例   string sSmtpServer = ConfigHelper GetParameterValue( EmailConfig smtpserver );

    <?xml version= encoding= utf ?><EmailConfig Title= 邮件服务设置 ConfigContent= 邮件服务器设置 服务器设置 服务器设置 服务器设置 服务器设置 服务器设置 服务器设置 >  <Item Name= smtpserver Value= Desc= 邮件SMTP服务器 ControlType= TEXT ItemContent= 设置邮件SMTP服务器的地址 格式: >  </Item>  <Item Name= smtpfrom Value= c Desc= 邮件地址 ControlType= TEXT ValidationExpression= ^\\w+(( \\w+)|(\\ \\w+))*\\@[A Za z ]+((\\ | )[A Za z ]+)*\\ [A Za z ]+$ >  </Item>  <Item Name= smtpUserName Value= cancankf Desc= 帐户 ControlType= TEXT >  </Item>  <Item Name= smtppsd Value= Desc= 密码 ControlType= TEXT >  </Item>  <Item Name= smtpSSL Value= false Desc= 是否SSL ControlType= CHECKBOX >  </Item>  <Item Name= smtpPort Value= Desc= 端口 ControlType= TEXT ValidationExpression= \\d >  </Item>  <Item Name= smtpDateTest Value= Desc= 测试日期 ControlType= DATETIME >  </Item>  <Item Name= smtpListTest Value= Desc= 测试列表 ControlType= DROPLIST Dict= |值 |值 |值 >  </Item></EmailConfig>

cha138/Article/program/net/201311/13658

相关参考

知识大全 使用配置文件创建口令管理策略

  多数Oracle数据库用户都使用默认配置文件创建用户帐户自从Oracle开始就可以通过创建一个配置文件然后使用以下两个语句之一分配给它一个用户来锁定一个帐户    CREATEUSERmyuser

教育管理核心业务、通用业务、特色业务的关系?

怎样理解教育管理核心业务、通用业务、特色业务的关系?教育管理信息化是一个以教育基础数据库为中轴的立体结构体系,其中的核心业务、通用业务、特色业务三者密不可分,核心业务是通用业务和特色业务的基础,核心业

知识大全 人力资源管理师是不是全国通用的

人力资源管理师是不是全国通用的?人力资源管理师,这种证书在全国是通用的。人力资源管理师,在企业内部主要从事员工招聘选拔、绩效考核、薪酬福利管理、劳动关系协调等工作。国家自2003年开始,在全国范围内开

知识大全 Java程序性能优化-缓存(Cache)(1)

Java程序性能优化-缓存(Cache)(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-缓存(Cache)(2)

Java程序性能优化-缓存(Cache)(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-缓存(Cache)(3)

Java程序性能优化-缓存(Cache)(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 JAVA中各类CACHE机制实现的比较

JAVA中各类CACHE机制实现的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在NET中

知识大全 简单介绍ASP中Cache技术的应用

简单介绍ASP中Cache技术的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASP从发布

知识大全 Wap流量统计开发中使用Cache心得

Wap流量统计开发中使用Cache心得  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在《他舅网

知识大全 asp.net cache实用

   if(!IsPostBack)//第一次加载