2011-03-07 101 views
2

我们有一个动态组合的应用程序,用户可以在其中添加服务和操作。此应用程序安装在服务器群集上。从数据库中读取system.servicemodel部分

由于向应用程序添加服务涉及太多的写入web.config,我想知道是否有可能从数据库中读取system.servicemodel部分而不是web.config

似乎微软的配置实施与其存储的位置非常紧密。

+2

不是我所知道的 - 我已经尝试了几件事,对它进行了相当多的研究 - 没有取得太大的成功。你当然可以一起构建你自己的WCF配置系统,并在代码中构建你的绑定等 - 但是我没有找到任何将标准.NET配置部分放入数据库的方法,并且.NET从这里解释了它: - (没有提供者模型或任何似乎支持:-( – 2011-03-07 15:30:16

+0

@marc_s:你有没有试过类似于以下提供的内容?请分享您在研究中发现的事实? – 2011-03-07 21:34:17

+0

@rest wing:确定 - 发送给我一个e - 邮件 - 这是在我的个人资料.... – 2011-03-10 21:39:39

回答

0

没有“开箱即用”的方式来做到这一点。但是,这是可能的。

几英尺以下,Configuration类使用FileStream实例,它实际上可以使用任何Stream。这个特定的步骤可以用接口的自定义实现(许多在那里实现的属性和方法)来代替。

特别有趣的是OpenStreamForReadOpenStreamForWrite,两者都返回Stream实例。在那里,您可以将逻辑从数据库中将配置节的XML抽取到ConfigurationSection实例中,并将ConfigurationSection实例作为XML抽取到数据库中。

下一步是创建一个Configuration类的实例。然而,在这里我们必须变脏,因为它的构造函数永远不会离开System.Configuration王国。需要使用反射来达到和使用它。我建议实施IInternalConfigConfigurationFactory来包装反射魔法。

Configuration Create(Type typeConfigHost, 
    params object[] hostInitConfigurationParams); 

作为第一个参数传递实现的配置主机的类型。

当我们有Configuration实例后,我们可以使用它自定义的ServiceHost,ChannelFactory<T>DuplexChannelFactory<T>