• ASP.NET下使用xml反序列化、缓存实现个性化配置文件的实时生效


    因为一些配置属性比较多,存在多组属性,因此结合xml解析、缓存技术,实现配置文化的自动解析、存入缓存、缓存依赖实时更新配置内容。

    配置文件反序列化存入缓存的核心方法:

     public Class.Settings GetSettings()
       {
           if (HttpRuntime.Cache["settings"] != null)
               return (Class.Settings)HttpRuntime.Cache["settings"];
           string rootPath = GetPath();
           #region rootPath
           if (rootPath == "")
           {
               log.Write(MsgType.Fatal, "配置文件根目录rootPath为空");
               return null;
           }
           else
           {
               if (!rootPath.EndsWith("\"))
                   rootPath += "\";
               rootPath = rootPath + "settings\settings.config";
           }
           #endregion
           if (!File.Exists(rootPath))
           {
               log.Write(MsgType.Fatal, "配置文件根目录rootPath为空");
               return null;
           }
           string content = File.ReadAllText(rootPath, Encoding.Default);
           Class.Settings model = PublicMethod.XmlSerialize.DeserializeXML<Class.Settings>(content);
           log.Write(MsgType.Information, "读取配置文件");
           CacheDependency cd = new CacheDependency(rootPath);
           HttpRuntime.Cache.Add("settings", model, cd, DateTime.Now.AddMinutes(5), TimeSpan.Zero, CacheItemPriority.High, null);
           return model;
       }
    

    上面自动获取rootPath的方法:

    	/// <summary>
        /// 取当前根目录的方法 
        /// </summary>
        private static string GetPath()
        {
            string rootPath = "";
            System.Diagnostics.Process p = System.Diagnostics.Process.GetCurrentProcess();
            //WebDev.WebServer      visual studio web server
            //xxx.vhost             Winform
            //w3wp                  IIS7
            //aspnet_wp             IIS6
            //iisexpress            vs2013
            string processName = p.ProcessName.ToLower();
            if (processName == "aspnet_wp" || processName == "w3wp" || processName == "webdev.webserver" || processName == "iisexpress")
            {
                if (System.Web.HttpContext.Current != null)
                    rootPath = System.Web.HttpContext.Current.Server.MapPath("~/");
                else //当控件在定时器的触发程序中使用时就为空
                {
                    rootPath = System.AppDomain.CurrentDomain.BaseDirectory;
                }
            }
            return rootPath;
        }
    

    Settings实体类的定义,要注意,这里的实体类要和settings配置文件对应,否则反序列化会出错:

    [XmlRoot(Namespace = "", IsNullable = false, ElementName = "settings")]
    public class Settings
    {
        #region 属性
        [XmlElement("logger")]
        public LoggerConfig logger { get; set; }
        #endregion
        #region 子类
        [XmlType(TypeName = "logger")]
        public class LoggerConfig
        {
            public string loglevel { get; set; }
            public string savepath { get; set; }
        }  
        #endregion
    }
    

    settings.config的内容实例

    	<?xml version='1.0' encoding='utf-8'?>
    	<settings>
    	  <logger>
    	    <loglevel>0</loglevel>
    	    <savepath>d:log</savepath>
    	  </logger>
    	    <queryurl>http://11.56.254.234:88/shashachaxunserver/shashachaxun</queryurl>
    	    <receiveurl>http://172.16.1.131:88/ThirdPay/ChinaUMS/xml.aspx</receiveurl>
    	    <turnurl>http://172.16.1.131:88/ThirdPay/ChinaUMS/query.aspx</turnurl>
    	  </chinaums>
    	</settings>
    

    原文链接http://huisky.com/blog/17011922322264

  • 相关阅读:
    使用Jquery的Ajax调用后台方法
    FileUpload与UpdatePanel
    OnClick与OnClientClick的时序和条件
    LinQ使用积累
    If...Else转换为Action的写法
    淘宝对接(二)
    淘宝对接(一)
    dialog传值
    android sdk开发包国内下载地址合集
    admob android
  • 原文地址:https://www.cnblogs.com/zyh1989/p/6321839.html
Copyright © 2020-2023  润新知