虽然做了几个网站,但是一直有个问题困扰我,就是网站配置文件的保存问题,网上有人说保存在数据库,有人说保存在XML中。保存在数据库中是个方便的选择,但是有个问题,每张表都应该有个主键,如果网站在多台服务器上,怎么区分网站(若每个网站有不同配置信息),后面查资料,发觉我的想法是多余的。后来通过对某商城的代码分析,分离出了XML保存配置信息的方法,我看他数据库中也有配置信息,但是网站中始终没找到更新和读取的语句(有点奇怪),以下是分离出的代码
1.读写配置文件
(1)、在BLL中
(1)、在BLL中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
private readonly cmsDal.WebSet dal = new cmsDal.WebSet(); /// <summary> /// 读取配置文件 /// </summary> /// <param name="configFilePath"></param> /// <returns></returns> public cmsModel.WebSet loadConfig(string configFilePath) { return dal.loadConfig(configFilePath); } /// <summary> /// 保存配置文件 /// </summary> /// <param name="mode"></param> /// <param name="configFilePath"></param> /// <returns></returns> public cmsModel.WebSet saveConifg(cmsModel.WebSet mode, string configFilePath) { return dal.saveConifg(mode, configFilePath); }
(2) 、在DAL中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
private static object lockHelper = new object(); /// <summary> /// 读取配置文件 /// </summary> /// <param name="configFilePath"></param> /// <returns></returns> public cmsModel.WebSet loadConfig(string configFilePath) { return (cmsModel.WebSet)SerializationHelper.Load(typeof(cmsModel.WebSet), configFilePath); } public cmsModel.WebSet saveConifg(cmsModel.WebSet mode, string configFilePath) { lock (lockHelper) { SerializationHelper.Save(mode, configFilePath); //Shannon.Dal.Providers.webSetProvider.SetInstance(mode); } return mode; }
(3)在 基类中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
/// <summary> /// 反序列化 /// </summary> /// <param name="type">对象类型</param> /// <param name="filename">文件路径</param> /// <returns></returns> public static object Load(Type type, string filename) { FileStream fs = null; try { // open the stream... fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); XmlSerializer serializer = new XmlSerializer(type); return serializer.Deserialize(fs); } catch (Exception ex) { throw ex; } finally { if (fs != null) fs.Close(); } } /// <summary> /// 序列化 /// </summary> /// <param name="obj">对象</param> /// <param name="filename">文件路径</param> public static void Save(object obj, string filename) { FileStream fs = null; // serialize it... try { fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); XmlSerializer serializer = new XmlSerializer(obj.GetType()); serializer.Serialize(fs, obj); } catch (Exception ex) { throw ex; } finally { if (fs != null) fs.Close(); } }
当然要使用此方法,必须的先写个Model。以上资料来自网上开源代码,仅供学习用,如果大家有好的保存(读取)网页配置信息的方法,请不吝赐教,嘿嘿