我们有一个动态组合的应用程序,用户可以在其中添加服务和操作。此应用程序安装在服务器群集上。
由于向应用程序添加服务涉及到web.config
的大量写入,我想知道是否可以从数据库而不是system.servicemodel
读取web.config
部分。
似乎微软的配置实现与其存储的位置紧密耦合。
答案 0 :(得分:0)
没有“开箱即用”的方式来做到这一点。但是,这是可能的。
以下几脚,Configuration
类使用FileStream
实例,它实际上可以使用任何Stream
。可以使用IInternalConfigHost
接口的自定义实现替换该特定步骤(在那里实现许多属性和方法)。
特别有趣的是OpenStreamForRead
和OpenStreamForWrite
,两者都返回Stream
个实例。在那里,您可以将逻辑从数据库的XML配置到ConfigurationSection
实例,并将ConfigurationSection
实例作为XML放入数据库。
下一步是创建Configuration
类的实例。但是,在这里我们必须变脏,因为它的构造函数永远不会离开System.Configuration
王国。需要使用反射来达到并使用它。我建议实施IInternalConfigConfigurationFactory
来包装反射魔法。
Configuration Create( Type typeConfigHost,
params object[] hostInitConfigurationParams );
作为第一个参数传递已实现的配置主机的类型。
我们有Configuration
个实例后,我们可以使用自定义ServiceHost
,ChannelFactory<T>
和DuplexChannelFactory<T>
。