App.config中的端点一次更新后不会再次更新

时间:2018-11-06 21:54:03

标签: c# app-config

我正在编写一个带有下拉菜单的Windows表单,以指示在哪个环境中执行SOAP调用。我在项目中有服务参考,但是正在根据下拉选择动态地修改端点。加载应用程序并尝试后,它第一次可以运行,但是一旦我选择了其他环境,然后再试一次,它就不会更新。如果我关闭该应用程序,然后选择以前失败的环境,则它可以工作。这是我的app.config:

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IApiService" />
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://api.qa.mycompany.com/ApiService.svc/ApiService.svc" 
                binding="basicHttpBinding" 
                bindingConfiguration="BasicHttpBinding_IApiService" 
                contract="API50Service.IApiService" 
                name="BasicHttpBinding_IApiService" />
    </client>
  </system.serviceModel>
</configuration>

这是我的更新端点的代码:

private void SetEnv()
{
    if (envSelect.Text.ToUpper().Equals("QA"))
    {
        SetEndpoint("BasicHttpBinding_IApiService", "http://api.qa.mycompany.com/ApiService.svc/ApiService.svc");
    }
    else if (envSelect.Text.ToUpper().Equals("PROD"))
    {
        SetEndpoint("BasicHttpBinding_IApiService", "http://api.mycompany.com/ApiService.svc/ApiService.svc");
    }
}

private void SetEndpoint(string name, string endpoint)
{
    try
    {
        var xmlDoc = new XmlDocument();
        xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
        xmlDoc.SelectSingleNode($"//system.serviceModel/client/endpoint[@name='{name}']")
            .Attributes["address"].Value = endpoint;
        xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
        ConfigurationManager.RefreshSection("system.serviceModel/client");
    }
    catch (NullReferenceException)
    {
        MessageBox.Show(@"Unable to set endpoint for service " + name + @".  Check app.config.", @"Error:",
            MessageBoxButtons.OK);
    }
}

0 个答案:

没有答案