У нас есть ряд веб-служб, которые находятся в разных средах (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, который я могу найти.