Рекомендации по использованию строки подключения Azure - PullRequest
50 голосов
/ 16 ноября 2010

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

Ответы [ 5 ]

28 голосов
/ 03 марта 2011

В тех случаях, когда не имеет значения, могут ли разработчики видеть производственные учетные данные, вы можете использовать встроенные преобразования конфигурации 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>
14 голосов
/ 16 ноября 2010

Лично мы:

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

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

7 голосов
/ 26 июня 2012

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

6 голосов
/ 31 мая 2011

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

6 голосов
/ 16 ноября 2010

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

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

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

...