Конечная точка в App.config не обновляется после однократного обновления - PullRequest
0 голосов
/ 07 ноября 2018

Я пишу форму окна с раскрывающимся списком, чтобы указать, в какой среде выполнять вызов 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);
    }
}
...