Сервис WCF с версией для DEV, QA и PROD - PullRequest
2 голосов
/ 24 января 2012

Во-первых, я посмотрел на google и stackoverflow, но, похоже, ничто не соответствует моим желаниям.

Тем не менее.Я использую приложение MVC (оно также может быть приложением веб-форм), которое я унаследовал от предыдущих разработчиков.Текущие ссылки на сервисы указывают на производственные серверы, и я хотел бы просто указать также на локальные серверы разработки.В идеале я не хотел бы редактировать файл web.config для перехода с dev на prod (особенно, если он предназначен для нескольких мест и т. Д.)

Таким образом, возможно, существует «лучшая практика» для добавления дополнительных веб-страниц.ссылки и возможность быстро «поменять и протестировать» ссылки DEV на ссылки PROD с очень небольшими изменениями конфигурации.

Возможно, шаблон проектирования или настройка appconfig для облегчения этого процесса?Конечно, было бы идеально держать его свободно связанным с внедрением в конструктор ссылок на сервисы.Есть мысли о том, как лучше всего это реализовать?

Ответы [ 2 ]

4 голосов
/ 26 января 2012

Другой вариант - добавить несколько конфигураций конечных точек для одной и той же службы, которые указывают на разные адреса.Затем при создании нового экземпляра клиента службы вы передаете имя конфигурации конечной точки.

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 что-то, содержащее имя конфигурации конечной точки, которую вы хотите использовать, вам просто нужно ее изменить.в этом одном месте, и он будет обновляться по всему приложению.

Единственный улов здесь - это то, что вы не можете создать экземпляр своего сервисного клиента без передачи конфигурации конечной точки, которую вы хотите использовать, если у вас более одногоконфигурация конечной точки для того же контракта.

0 голосов
/ 26 января 2012

Обычно я делаю все настройки в базе данных, и у нас разные строки подключения к базе данных (машины разные) для каждой среды.

в app / web.config мы просто меняем 1 ключесли указать, на какую среду мы указываем, то все остальное берется из таблицы настроек в базе данных, которая содержит разные значения для каждой среды.Для сервисных ссылок проверенный код всегда и только указывает на localhost, а во время выполнения URL-адрес присваивается из настроек, полученных из базы данных.

...