我的项目正在使用MVVM在WPF中开发。在viewModel中使用WCF服务。在View中,存在app.config文件,其中包含有关WCF配置的信息,例如端点信息...。我们有两个服务,例如service1和service2都具有相同的功能,但服务地址将不同。 Service1正在与数据库1通信,而service2正在与数据库2通信,因此对DB的服务是一对一的映射。在视图中,有一个ComboBox,它将显示两个选项,例如DB1和DB2。基于comboBox的选择,我必须根据WPF-MVVM模式更新我的app.config文件[端点地址]。因为应用程序应该使用新服务重新初始化-DB函数调用。因此,如果更改了ComboBox选择,那么将在ViewModel中编写命令(命令)的调用位置。那么如何更新配置文件?
还有其他方法可以实现吗?
答案 0 :(得分:0)
配置必须在您的启动项目中,这可能是问题
答案 1 :(得分:0)
您有两个相同的WCF服务,并且希望用户使用ComboBox选择与您的应用程序进行交互的对象。因此,您的应用程序只需要在配置文件中为代理定义一个定义。指向两个URL中的哪个都无所谓。
您可以在运行时在代理的构造函数中以编程方式设置端点的URL。我无法从问题中分辨出您使用的是哪种协议,但是有some examples here条关于如何执行此协议的信息。
您需要保留可能的URL值列表,以允许用户做出选择(但这与选择的URL不同,我将在后面进行介绍)。我建议在文件的这一部分中配置其他URL(我将猜测http协议,以便您了解我的意思)...
<configuration>
...
<appSettings>
<add key="Endpoint1" value="http://whatever"/>
<add key="Endpoint2" value="http://whatever"/>
</appSettings>
...
</configuration>
然后在启动时,遍历这些内容,将它们放入您的ComboBox中:
var appSettings = ConfigurationManager.AppSettings;
foreach (var key in appSettings.AllKeys.Where(x=>x.StartsWith("Endpoint"))
{
// put appSettings[key] into the combobox (in a list in your viewmodel if you use MVVM)
}
然后,您需要存储该用户选择了其中之一(并记住在启动时预先选择该值)。我建议使用“用户设置”,该设置(与“ App.config”文件不同)允许更改值。有关具体操作,请参见User Settings in C#。