当前位置: 首页>>代码示例>>C#>>正文


C# IConfigService.GetSection方法代码示例

本文整理汇总了C#中IConfigService.GetSection方法的典型用法代码示例。如果您正苦于以下问题:C# IConfigService.GetSection方法的具体用法?C# IConfigService.GetSection怎么用?C# IConfigService.GetSection使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IConfigService的用法示例。


在下文中一共展示了IConfigService.GetSection方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: RegisterServices

		/// <summary>
		/// 向指定的容器中注册服务
		/// </summary>
		/// <param name="container"></param>
		public static DefaultConfigService RegisterServices(Container container)
		{
			InternalLogService.Start.Info("初始化配置服务", LogCategory.Start);

			#region 配置服务初始化,配置服务启用之前,不能使用 Logger
			// 注册配置服务
			container.Register(typeof(XMS.Core.Configuration.IConfigService), typeof(XMS.Core.Configuration.DefaultConfigService), "ConfigService", LifestyleType.Singleton);

			// 到此时配置服务应该已可用,如果不可用抛出异常,初始化失败
			try
			{
				configService = container.Resolve<IConfigService>();
			}
			catch (Exception err)
			{
				throw new ConfigurationErrorsException("找不到可用的配置服务,这通常是由于主配置文件中缺少相关配置或存在错误造成的,请检查并修改配置文件。", err);
			}

			// 注册集中配置服务所需要的远程配置服务
			Type serviceType = typeof(XMS.Core.Configuration.ServiceModel.IRemoteConfigService);
			baseServiceTypes = new List<Pair<string, Type>>();
			baseServiceTypes.Add(new Pair<string, Type>() { First = "ConfigService", Second = serviceType });
			// 暂时使用 PerCall 模式,将来如果通过双工服务实现服务器端配置文件变化即时通知客户端,则应使用 PerEndPoint 长连接模式。
			RegisterService(container, serviceType, ClientChannelCacheMode.PerCall);

			// 从应用程序配置文件中绑定配置服务
			if (IsNotWebApplication())
			{
				BindServiceConfiguration(System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None), new List<Pair<string, Type>>(baseServiceTypes), GetRetryingTimeInterval());
			}
			else
			{
				BindServiceConfiguration(System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath, System.Web.Hosting.HostingEnvironment.SiteName), new List<Pair<string, Type>>(baseServiceTypes), GetRetryingTimeInterval());
			}

			// 如果启用集中配置,则通过配置服务从配置服务器下载配置文件
			if (configService.EnableConcentratedConfig)
			{
				InternalLogService.Start.Info("为配置服务启用集中配置。", LogCategory.Start);

				if (configService is DefaultConfigService)
				{
					((DefaultConfigService)configService).InitRemoteConfigService(container);
				}
			}
			#endregion

			InternalLogService.Start.Info("注册服务引用。", LogCategory.Start);

			// 通过配置服务获取要注册的服务
			ServiceReferencesSection services = (ServiceReferencesSection)configService.GetSection("wcfServices");

			if (services != null) // 如果配置文件中不包含 wcfServices 配置节,则不需要进行注册,这适用于不使用其他服务的场合
			{
				int retryingTimeInterval = GetRetryingTimeInterval();
				// 注册服务类型(服务类型只在应用程序启动时注册1次)
				listServiceTypes = new List<Pair<string, Type>>();

				for (int i = 0; i < services.ServiceReferences.Count; i++)
				{
					try
					{
						serviceType = Type.GetType(services.ServiceReferences[i].ServiceType, true, true);

						listServiceTypes.Add(new Pair<string, Type>() { First = services.ServiceReferences[i].ServiceName, Second = serviceType });

						RegisterService(container, serviceType, (ClientChannelCacheMode)Enum.Parse(typeof(ClientChannelCacheMode), services.ServiceReferences[i].CacheModel));

						InternalLogService.Start.Info(String.Format("注册类型为 {0} 的 WCF 服务。", serviceType.FullName), LogCategory.Start);
					}
					catch (Exception registerException)
					{
						throw new Exception(String.Format("注册服务{{serviceName={0}, serviceType={1}}}失败,详细错误信息为:{2}", services.ServiceReferences[i].ServiceName, services.ServiceReferences[i].ServiceType, registerException.GetBaseException().Message), registerException);
					}
				}

				InternalLogService.Start.Info("绑定服务配置", LogCategory.Start);
				// 绑定服务配置
				BindServiceConfiguration(configService, listServiceTypes, retryingTimeInterval);
			}

			// 监听配置文件变化事件
			configService.ConfigFileChanged += new ConfigFileChangedEventHandler(configService_ConfigFileChanged);

			return configService as DefaultConfigService;
		}
开发者ID:Kjubo,项目名称:xms.core,代码行数:90,代码来源:ConcentratedConfigServiceClient.cs


注:本文中的IConfigService.GetSection方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。