【问题标题】:How to update app.config in c#如何在 C# 中更新 app.config
【发布时间】:2019-01-06 19:52:50
【问题描述】:

我的项目正在使用 MVVM 在 WPF 中开发。在使用 WCF 服务的 viewModel 中。在 View app.config 文件中存在,它包含有关 WCF 配置的信息,如端点信息...。我们有两个服务,如 service1 和 service2,两者功能相同,但服务地址不同。 Service1 与DataBase1 通信,service2 与Database2 通信,因此服务到DB 是一对一的映射。在视图中有一个组合框,它将显示两个选项,如 DB1 和 DB2。基于组合框选择,我必须按照 WPF-MVVM 模式更新我的 app.config 文件 [端点地址]。因为应用程序应该使用新服务重新初始化 - DB 函数调用。因此,如果 ComboBox 选择更改了命令将调用哪个(命令)在 ViewModel 中写入。那么如何更新配置文件呢?

还有其他方法可以实现吗?

【问题讨论】:

  • 您是说您有两个相同的 WCF 服务,并且您希望用户使用组合框来选择您的应用程序与哪一个进行交互?
  • @Richardissimo:是的,你是对的。所以 app.config 在重新启动我的应用程序时应该有适当的地址。

标签: c# wpf wcf mvvm


【解决方案1】:

配置需要在你的启动项目中,这可能是问题

【讨论】:

  • 你可以有两个端点,当你实例化代理时,你指定端点的名称。
【解决方案2】:

您有两个相同的 WCF 服务,并且您希望用户使用 ComboBox 来选择您的应用程序与哪一个进行交互。因此,您的应用程序只需要在配置文件中对代理进行单一定义。这指向两个 URL 中的哪一个并不重要。

您可以在运行时在代理的构造函数中以编程方式设置端点的 URL。我无法从问题中看出您使用的是什么协议,但有 some examples here 说明如何执行此操作。

您需要保留可能的 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# 了解如何执行此操作。

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2011-08-05
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    相关资源
    最近更新 更多