Использование веб-сервисов в разных средах

У нас есть ряд веб-служб, которые находятся в разных средах (dev/qa/staging/production), доступ к которым осуществляется из веб-приложения, веб-сайта и других служб. Есть также несколько различных областей обслуживания. Итак, для производства у нас есть услуги на четырех разных коробках.

Мы решили проблему строки подключения к БД, проверив имя хоста в global.asax и установив некоторые общие настройки приложения на основе этого имени хоста. В системе управления версиями есть файл config.xml, в котором перечислены различные имена хостов и параметры, которые они должны получить.

Однако мы не нашли элегантного решения для веб-сервисов. Что мы сделали до сих пор, так это добавили ссылки на все среды в проекты и добавили несколько операторов using в файлы, которые используют службы. Когда мы проверяем проект, мы раскомментируем соответствующий оператор using для среды, в которой мы находимся.

Это выглядит примерно так:

// Development
// using com.tracking-services.dev
// using com.upload-services.dev

// QA
// using com.tracking-services.qa
// using com.upload-services.qa

// Production
// using com.tracking-services.www
// using com.upload-services.www

Очевидно, что по мере того, как мы используем веб-сервисы все больше и больше, этот метод будет становиться все более и более обременительным.

Я подумал о том, чтобы поместить пространства имен в web.config.dev, web.config.qa и т. д. и заменить их при запуске приложения в global.asax. Я не думаю, что это сработает, потому что к моменту запуска global.asax компиляция уже завершена, и изменения web.config не будут иметь большого эффекта.

Поскольку «лучшие практики» включают использование веб-сервисов для доступа к данным, я надеюсь, что это не уникальная проблема, и кто-то уже придумал решение.

Или мы идем обо всем этом неправильно?

Изменить: это веб-службы asmx. В web.config нет ссылки на URL, который я могу найти.


person Jere.Jones    schedule 15.10.2009    source источник
comment
Почему у вас есть разные пространства имен в ваших веб-сервисах для разных сред? Разве не одни и те же двоичные файлы развернуты для разработки, контроля качества и производства?   -  person Darin Dimitrov    schedule 15.10.2009
comment
Различные пространства имен — это то, как указываются разные URL-адреса. Dev, QA и Production часто имеют разные двоичные файлы, поскольку любое изменение должно быть разработано в Dev, затем перемещено в QA для тестирования и, наконец, отправлено в производство. Все три двоичных файла могут быть разными.   -  person Jere.Jones    schedule 15.10.2009
comment
Пространства имен не должны меняться. Это большая ошибка.   -  person John Saunders    schedule 19.10.2009


Ответы (1)


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

person Wyatt Barnett    schedule 15.10.2009
comment
Это звучит как отличная идея. Эм... как мне это сделать? - person Jere.Jones; 15.10.2009
comment
Как именно, зависит от того, какие типы прокси (ASMX или WCF) вы используете. В любом случае в конфигурации вашего приложения должны быть какие-то вещи, сгенерированные при создании прокси. Отрегулируйте URL-адрес в нем по мере необходимости. Возможно, вам придется установить для динамического свойства прокси-сервера значение true и выполнить повторную генерацию. Вы также можете предоставить информацию о конфигурации в коде, если хотите сделать это таким образом или иметь собственную инфраструктуру конфигурации. - person Wyatt Barnett; 15.10.2009