Рекомендации по использованию строки подключения 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>
Лично мы:
- Полностью прерванные преобразования веб-конфигурации.
- Настройка извлекается из cscfg.
- Версия разработки cscfg указывает на локальную среду разработки (которая хранится в системе управления версиями).
- При развертывании в производство мы предоставляем защищенные учетные данные для производственного 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>