因为一些配置属性比较多,存在多组属性,因此结合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