因?yàn)橐恍┡渲脤傩员容^多,存在多組屬性,因此結(jié)合xml解析、緩存技術(shù),實(shí)現(xiàn)配置文化的自動(dòng)解析、存入緩存、緩存依賴實(shí)時(shí)更新配置內(nèi)容。
配置文件反序列化存入緩存的核心方法:
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; } |
上面自動(dòng)獲取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> /// 取當(dāng)前根目錄的方法 /// </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 //當(dāng)控件在定時(shí)器的觸發(fā)程序中使用時(shí)就為空 { rootPath = System.AppDomain.CurrentDomain.BaseDirectory; } } return rootPath; } |
Settings實(shí)體類的定義,要注意,這里的實(shí)體類要和settings配置文件對(duì)應(yīng),否則反序列化會(huì)出錯(cuò):
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的內(nèi)容實(shí)例
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 > |
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持服務(wù)器之家!
原文鏈接:http://huisky.com/blog/17011922322264