Подтвердить что ты не робот

Наилучшие практики строки подключения Azure

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

4b9b3361

Ответ 1

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

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

<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>

Ответ 2

Лично мы:

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

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

Ответ 3

Вы можете использовать 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.

Ответ 4

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

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

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

Ответ 5

У меня было такое же требование для преобразования 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>