因为一些配置属性比较多,存在多组属性,因此结合xml解析、缓存技术,实现配置文化的自动解析、存入缓存、缓存依赖实时更新配置内容。
配置文件反序列化存入缓存的核心方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/// <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配置文件对应,否则反序列化会出错:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[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的内容实例
1
2
3
4
5
6
7
8
9
10
11
|
<? 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