我们有一个动态组合的应用程序,用户可以在其中添加服务和操作。此应用程序安装在服务器群集上。从数据库中读取system.servicemodel部分
由于向应用程序添加服务涉及太多的写入web.config
,我想知道是否有可能从数据库中读取system.servicemodel
部分而不是web.config
。
似乎微软的配置实施与其存储的位置非常紧密。
我们有一个动态组合的应用程序,用户可以在其中添加服务和操作。此应用程序安装在服务器群集上。从数据库中读取system.servicemodel部分
由于向应用程序添加服务涉及太多的写入web.config
,我想知道是否有可能从数据库中读取system.servicemodel
部分而不是web.config
。
似乎微软的配置实施与其存储的位置非常紧密。
没有“开箱即用”的方式来做到这一点。但是,这是可能的。
几英尺以下,Configuration
类使用FileStream
实例,它实际上可以使用任何Stream
。这个特定的步骤可以用接口的自定义实现(许多在那里实现的属性和方法)来代替。
特别有趣的是OpenStreamForRead
和OpenStreamForWrite
,两者都返回Stream
实例。在那里,您可以将逻辑从数据库中将配置节的XML抽取到ConfigurationSection
实例中,并将ConfigurationSection
实例作为XML抽取到数据库中。
下一步是创建一个Configuration
类的实例。然而,在这里我们必须变脏,因为它的构造函数永远不会离开System.Configuration
王国。需要使用反射来达到和使用它。我建议实施IInternalConfigConfigurationFactory
来包装反射魔法。
Configuration Create(Type typeConfigHost,
params object[] hostInitConfigurationParams);
作为第一个参数传递实现的配置主机的类型。
当我们有Configuration
实例后,我们可以使用它自定义的ServiceHost
,ChannelFactory<T>
和DuplexChannelFactory<T>
。
不是我所知道的 - 我已经尝试了几件事,对它进行了相当多的研究 - 没有取得太大的成功。你当然可以一起构建你自己的WCF配置系统,并在代码中构建你的绑定等 - 但是我没有找到任何将标准.NET配置部分放入数据库的方法,并且.NET从这里解释了它: - (没有提供者模型或任何似乎支持:-( – 2011-03-07 15:30:16
@marc_s:你有没有试过类似于以下提供的内容?请分享您在研究中发现的事实? – 2011-03-07 21:34:17
@rest wing:确定 - 发送给我一个e - 邮件 - 这是在我的个人资料.... – 2011-03-10 21:39:39