我正在编写一个带有下拉菜单的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);
}
}