Каков рекомендуемый подход для развертывания в нескольких средах Azure (dev, test, production)?

#c# #azure #asp.net-mvc-5

#c# #azure #asp.net-mvc-5

Вопрос:

У меня есть веб-приложение на C #, использующее mvc5. В настоящее время он работает в Azure, и у меня есть экземпляры dev, test и production. Что мне нужно сделать, чтобы гарантировать, что строки подключения к базе данных будут автоматически меняться по мере отправки приложения в каждую среду? Я знаю, что это возможно с помощью web.config, поскольку вы можете определить Web.Debug.Конфигурация и т.д., Но как бы я поступил с этим для разных рабочих ролей в Azure? Я искал решение по всему Интернету. В двух словах, я хотел бы использовать тот же подход, что и для нескольких файлов web.config, но для Azure.

В качестве дополнительного фона для моего решения у меня есть база репозиториев, выделенная в отдельный проект, и там я пытаюсь получить строку подключения из файлов конфигурации (скажем domain.dll это имя библиотеки, которая его содержит). Сначала это работало, когда я использовал только web.config, но когда мне пришлось запускать DLL-файлы моего домена из другой рабочей роли, конфигурация начала возвращать null; потому что этот код не будет выполняться при запуске из другого рабочего процесса (не из Интернета). Похоже, это создает интересную проблему, что, если мне нужно использовать domain.dll код вне Интернета и за пределами Azure? Как мне по-прежнему поддерживать преимущества строки подключения, предоставляемые Azure и web.config?

Ответ №1:

Предположение: вы используете веб-службы, а не веб-сайты. Разница есть.

Есть 2 способа получить то, что вам нужно:

  1. Для рабочей роли вы можете выполнять app.config преобразования почти так же, как вы делаете в web.config . Только вам нужно будет сделать это с помощью SlowCheetah. Для этого есть пакет nuget, а также расширение VS для создания файлов преобразования. С этим методом слишком много ошибок. Мне это никогда не нравилось, поэтому переходите ко второму варианту.

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

Там вы можете добавить строку подключения к базе данных. И создайте конфигурацию для каждой среды, которую вы запускаете (dev, test, prod). И поместите другую строку подключения для каждой среды.

Чтобы получить строку подключения, вы выполняете:

 CloudConfigurationManager.GetSetting("DatabaseConnectionString")
  

Как только ваш сайт будет развернут, вы увидите эти значения конфигурации на Configure вкладке портала Azure.

Комментарии:

1. Я использую веб-сайты.

2. Откуда берутся «роли»? как вы выполняете фоновые процессы вне веб-контекста? Веб-задания?

3. Прошу прощения, я немного запутался. Будет ли «DatabaseConnectionString» в приведенном выше примере использоваться для разработки, тестирования и производства или вам нужно будет иметь другое строковое имя для каждого соединения. Похоже, что в приведенном выше примере вам потребуется другое имя для каждого соединения? Кроме того, если это не так, какова была бы логика для определения того, когда среда изменяется? Я вижу раскрывающийся список «конфигурация службы», но достаточно ли этого?

4. Эти параметры различаются для каждой создаваемой вами конфигурации: все конфигурации Dev, Test и Prod будут иметь параметр DatabaseConnectionString, но для каждой среды вы сможете указать значение. Думайте об этом как о конфигурации сборки: отладка против выпуска и web.config преобразований. Но если вы не используете веб-роли, это не будет применяться.

5. Где я мог бы варьироваться между dev, test и prod? Для параметра конфигурации службы у меня есть локальные, облачные параметры и параметры управления, но я не вижу, где я могу указать среду на экране, указанном выше.

Ответ №2:

Вы должны проводить различие между «сборкой в режиме выпуска» и «развертыванием в среде X».

Сборка в режиме выпуска должна просто преобразовать ваши файлы конфигурации, чтобы они были «готовы к работе». С помощью MSDeploy вы можете параметризовать свои файлы конфигурации, чтобы при развертывании они были заполнены параметрами, указанными вами в вашем сценарии MSDeploy.

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

Следует отметить, что параметризация ваших развертываний нарушит простой процесс «публикации» из Visual Studio из-за того, что вам не предоставляется возможность заполнить свои параметры во время мастера публикации … :'(

Ответ №3:

Вы должны управлять строками подключения через портал Azure, а не с помощью преобразований файла конфигурации. С приложением MVC это будет легко, перейдите на вкладку настройка и задайте там свои строки подключениянастройкастроки подключения

Для таких элементов, как веб-задания, используйте Microsoft.Изумрудные окна.ConfigurationManager который

предоставляет унифицированный API для загрузки параметров конфигурации независимо от того, где размещено приложение — локально или в облачной службе