ASP.NET下使用xml反序列化、緩存依賴實(shí)現(xiàn)個性化配置文件的實(shí)時生效
因?yàn)橐恍┡渲脤傩员容^多,存在多組屬性,因此結(jié)合xml解析、緩存技術(shù),實(shí)現(xiàn)配置文化的自動解析、存入緩存、緩存依賴實(shí)時更新配置內(nèi)容。
配置文件反序列化存入緩存的核心方法:
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> /// 取當(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)控件在定時器的觸發(fā)程序中使用時就為空 { rootPath = System.AppDomain.CurrentDomain.BaseDirectory; } } return rootPath; }
Settings實(shí)體類的定義,要注意,這里的實(shí)體類要和settings配置文件對應(yīng),否則反序列化會出錯:
[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í)例
<?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>
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
TreeView創(chuàng)建IHierarchicalDataSource類型的數(shù)據(jù)源實(shí)現(xiàn)
為TreeView創(chuàng)建IHierarchicalDataSource類型的數(shù)據(jù)源實(shí)現(xiàn)2009-01-01Asp.net core利用IIS在windows上進(jìn)行托管步驟詳解
這篇文章主要給大家介紹了關(guān)于Asp.net core利用IIS在windows上進(jìn)行托管步驟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03asp.net不用設(shè)置iis實(shí)現(xiàn)url重寫 類似偽靜態(tài)路由
說到不用設(shè)置iis,主要是為了實(shí)現(xiàn)在虛擬主機(jī)或是拿不到iis操作限的時候,不能添加isap又想實(shí)現(xiàn)類似于靜態(tài)化的程序?qū)崿F(xiàn)方式,先聲明,這里最終要實(shí)現(xiàn)的效果是,最終可以用12345.html替換show.aspx?id=12345這樣的地址訪問功能,支持任意擴(kuò)展名及無擴(kuò)展2014-01-01asp.net 使用Response.Filter 過濾非法詞匯
一般信息發(fā)布網(wǎng)站,論壇等均具有實(shí)現(xiàn)非法詞匯過濾功能,即當(dāng)用戶錄入非法詞匯時,進(jìn)行替換,使其無法顯示到頁面上,針對此種功能,通常采用的時,在讀取時,在讀到非法詞匯后,進(jìn)行替換。2010-03-03ASP.NET Core MVC學(xué)習(xí)教程之路由(Routing)
這篇文章主要給大家介紹了關(guān)于ASP.NET Core MVC學(xué)習(xí)教程之路由(Routing)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ASP.NET Core MVC具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07關(guān)于ASP.NET頁面打印技術(shù)的常用方法總結(jié)
B/S結(jié)構(gòu)導(dǎo)致了Web應(yīng)用程序中打印的特殊性;程序運(yùn)行在瀏覽器中,打印機(jī)在本地,而文件確可能在服務(wù)器上,導(dǎo)致了打印控制不是很靈活,接下來介紹幾種常見的打印技術(shù),感興趣的朋友可以了解下2013-01-01ASP.NET(VB)寫的后臺發(fā)送短信實(shí)現(xiàn)代碼
使用vb寫的后臺發(fā)送短信代碼,很實(shí)用的一項(xiàng)功能,感興趣的朋友可以了解下,或許對你學(xué)習(xí)asp.net vb有所幫助2013-02-02