Другой вариант - добавить несколько конфигураций конечных точек для одной и той же службы, которые указывают на разные адреса.Затем при создании нового экземпляра клиента службы вы передаете имя конфигурации конечной точки.
ContractServiceContractClient client =
new ContractServiceContractClient("DEV_Endpoint");
или
ContractServiceContractClient client =
new ContractServiceContractClient("PROD_Endpoint");
И в вашей конфигурации ServiceReference
<endpoint address="http://localhost:7821/ContractService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ContractService"
contract="ContractServiceReference.IContractService"
name="DEV_Endpoint" />
или
<endpoint address="http://service.apps.com/ContractService.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ContractService"
contract="ContractServiceReference.IContractService"
name="PROD_Endpoint" />
Тогда, если вы просто создадите глобальную статическую строку или добавите в свой файл app.config что-то, содержащее имя конфигурации конечной точки, которую вы хотите использовать, вам просто нужно ее изменить.в этом одном месте, и он будет обновляться по всему приложению.
Единственный улов здесь - это то, что вы не можете создать экземпляр своего сервисного клиента без передачи конфигурации конечной точки, которую вы хотите использовать, если у вас более одногоконфигурация конечной точки для того же контракта.