コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 public static string Combine(string folder, string file)
 {
     return(ConfigUtility.Combine(folder, file));
 }
コード例 #4
0
 private string GetPath(string sectionName)
 {
     return(ConfigUtility.Combine(config.LocalApplicationFolder, GetFileName(sectionName)));
 }