Рекомендации по использованию строки подключения Azure

У меня есть приложение, которое я только что перенес в Azure. В настоящее время я использую преобразование web.config для управления изменением базы данных, соединяющей строки dev/staging/prod. Как лучше всего управлять несколькими строками подключения в Azure?

5 ответов

Решение

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

1. Перейдите в папку проекта Azure в проводнике
2. Сделайте копию ServiceConfiguration.cscfg
3. Переименуйте копию в ServiceConfiguration.Base.cscfg.
4. Для каждой конфигурации сборки (например, Dev, Staging, Production) создайте ServiceConfiguration.<Имя конфигурации сборки>.cscfg файл. В этих файлах вы можете использовать обычный синтаксис преобразования конфигурации
5. Откройте файл.ccproj в текстовом редакторе.
6. Найдите следующий узел,

<ItemGroup>
    <ServiceDefinition Include="ServiceDefinition.csdef" />
    <ServiceConfiguration Include="ServiceConfiguration.cscfg" />
</ItemGroup>

и замените его следующим (вам нужно будет отредактировать этот блок в соответствии с вашими конфигурациями сборки):

<ItemGroup>
    <ServiceDefinition Include="ServiceDefinition.csdef" />
    <ServiceConfiguration Include="ServiceConfiguration.cscfg" />
    <None Include="ServiceConfiguration.Base.cscfg">
        <DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
    </None>
    <None Include="ServiceConfiguration.Dev.cscfg">
        <DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
    </None>
    <None Include="ServiceConfiguration.Staging.cscfg">
        <DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
    </None>
    <None Include="ServiceConfiguration.Production.cscfg">
        <DependentUpon>ServiceConfiguration.cscfg</DependentUpon>
    </None>
</ItemGroup>

7.Добавьте следующее в конец файла.ccproj, чуть выше </Project>:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
<Target Name="BeforeBuild">
    <TransformXml Source="ServiceConfiguration.Base.cscfg" Transform="ServiceConfiguration.$(Configuration).cscfg" Destination="ServiceConfiguration.cscfg" />
</Target>

8.Если вы используете CI-сервер, на котором не установлена ​​Visual Studio 10, вам, вероятно, придется скопировать папку C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web и ее содержимое из разработка машины на сервер.

Обновление: как заметил@SolarSteve, вам, возможно, придется добавить пространство имен в файлы ServiceConfiguration.*. Cscfg. Вот пример ServiceConfiguration.Base.cscfg:

<sc:ServiceConfiguration serviceName="MyServiceName" osFamily="1" osVersion="*" xmlns:sc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <sc:Role name="MyRoleName">
    <sc:Instances count="1" />
    <sc:ConfigurationSettings>
      <sc:Setting name="DataConnectionString" value="xxx" />
    </sc:ConfigurationSettings>
  </sc:Role>
</sc:ServiceConfiguration>

Лично мы:

  1. Полностью прерванные преобразования веб-конфигурации.
  2. Настройка извлекается из cscfg.
  3. Версия разработки cscfg указывает на локальную среду разработки (которая хранится в системе управления версиями).
  4. При развертывании в производство мы предоставляем защищенные учетные данные для производственного SQL Azure и хранилища.

Образец класса управления настройками, который сканирует параметры приложения и облачную среду на предмет значений конфигурации, можно найти в проекте Lokad.CQRS для Windows Azure с открытым исходным кодом (см. CloudSettingsProvider).

Вы можете использовать CloudConfigurationManager в Azure SDK 1.7 http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager

Это начинается с поиска в ServiceConfiguration.cscfg, например, ServiceConfiguration.Cloud.cscfg для настройки конфигурации. Если его там нет, он возвращается к web.config и app.config

Например

CloudConfigurationManager.GetSetting("StorageConnectionString")

Поищите в соответствующем файле cscfgfile параметр StorageConnectionString, затем выполните поиск в файле web.config, а затем в app.config.

У нас есть несколько сред (локальный разработчик внутри разработки, локальный разработчик вне разработки, тестирование, выпуск, который имеет 2 версии: выпуск / прод и выпуск / этап и 20 проектов, некоторые из которых нуждаются в некоторой изменчивости в настройках конфигурации. Мы решили это Проблема заключается в создании крошечного проекта "config", включающего туда подпапки, соответствующие окружениям. Мы копируем файлы из подпапки в зависимости от того, какую сборку мы делаем в корневую папку проекта config, во время каждой компиляции.

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

Надеюсь это поможет

У меня было такое же требование для преобразования ServiceConfiguration.

Я пошел с ответом от jmac (спасибо!), Но у меня были проблемы с пространством имен в базовой версии:

<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">

после того, как немного больше возни нашел Эндрю Паттерсон (Спасибо).

Итак, мой полученный файл преобразования:

<asc:ServiceConfiguration serviceName="TestCloud2" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns:asc="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
<asc:Role name="WebRole1">
    <asc:Instances count="1" />
    <asc:ConfigurationSettings>
        <asc:Setting name="LoggingStorage" value="UseDevelopmentStorage=true" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </asc:ConfigurationSettings>
</asc:Role>

Другие вопросы по тегам