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