private static string GetRemoteConfigFile() { string remoteFile = System.Web.Configuration.WebConfigurationManager.AppSettings[RemoteConfigFileAppSettingKey]; if (remoteFile == null) { remoteFile = LocalConfigurationManager.MapConfigPath(RemoteConfigurationManagerConfigFileName); } else { remoteFile = LocalConfigurationManager.MapConfigPath(remoteFile); } if (!File.Exists(remoteFile)) { LoggerWrapper.Logger.Info("配置文件" + remoteFile + "' 不存在, 将会在 '" + ConfigUtility.DefaultApplicationConfigFolder + "'创建新的默认配置文件"); remoteFile = ConfigUtility.Combine(ConfigUtility.DefaultApplicationConfigFolder, RemoteConfigurationManagerConfigFileName); // 如果 "RemoteConfigurationManager.config" 不存在时必须在此创建默认配置 if (!File.Exists(remoteFile)) { Directory.CreateDirectory(ConfigUtility.DefaultApplicationConfigFolder); using (XmlTextWriter writer = new XmlTextWriter(remoteFile, Encoding.UTF8)) { writer.WriteStartElement(RemoteConfigurationManagerConfiguration.TagName); RemoteConfigurationManagerConfiguration.DefaultConfig.WriteXml(writer); writer.WriteEndElement(); } } } return(remoteFile); }
/// <summary> /// 重写基类OnCreate方法来创建远程配置实例(原理其实还是把远程配置下载到本地创建本地配置实例) /// </summary> /// <param name="sectionName">Name of the section.</param> /// <param name="type">The type.</param> /// <param name="major">The major.</param> /// <param name="minor">The minor.</param> /// <returns></returns> protected override object OnCreate(string sectionName, Type type, out int major, out int minor) { string fileName = GetFileName(sectionName); //string path = GetPath( sectionName ); string path = ConfigUtility.Combine(config.LocalApplicationFolder, fileName); object obj = CreateLocalObject(type, path, out major, out minor); if (obj != null) { return(obj); } major = XmlSerializerSectionHandler.GetConfigurationClassMajorVersion(type); minor = XmlSerializerSectionHandler.DefaultUninitMinorVersion; try { RemoteConfigSectionParam newParams = GetServerVersion(sectionName, major); if (newParams != null) { //从远程下载! if (Download(newParams.SectionName, newParams.DownloadUrl, path, CheckDownloadStream)) { obj = CreateLocalObject(type, path, out major, out minor);//下载远程配置到本地后创建配置实例 } } } catch (Exception ex) { HandleException(ex, "从远程服务器下载配置 '" + sectionName + "' 时出错", sectionName); } //如果对象为null通过反射默认对象替代 if (obj == null) { LoggerWrapper.Logger.Info("无法从 RemoteConfiguration 取得拥有类型'" + type.Name + "' 的'" + sectionName + "' 节点,通将过反射创建空实例替代"); obj = Activator.CreateInstance(type); //为配置添加文件更改监控 ConfigWatcher.SetupWatcher(path, obj); ConfigWatcher.RegisterReloadNotification(path, OnConfigFileChanged); } return(obj); }
public static string Combine(string folder, string file) { return(ConfigUtility.Combine(folder, file)); }
private string GetPath(string sectionName) { return(ConfigUtility.Combine(config.LocalApplicationFolder, GetFileName(sectionName))); }