Azure连接字符串最佳实践

Cra*_*aig 50 connection-string azure application-settings staging azure-sql-database

我有一个应用程序,我只是迁移到Azure.目前我使用web.config转换来管理更改数据库连接字符串dev/staging/prod环境.如何在Azure中管理这些多个连接字符串?

Jon*_*ire 28

如果开发人员可以看到生产凭据并不重要,则可以使用内置的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>
Run Code Online (Sandbox Code Playgroud)

并用它替换它(你必须编辑这个块以匹配你的构建配置):

<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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

8.如果您使用的是未安装Visual Studio 10的CI服务器,则可能需要复制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>
Run Code Online (Sandbox Code Playgroud)


Rin*_*lin 14

我个人:

  1. 完全删除了Web配置转换.
  2. 设置从cscfg中检索.
  3. cscfg的开发版本指向本地开发环境(存储在版本控制中).
  4. 在部署到生产环境时,我们为生产SQL Azure和存储提供安全凭据.

有关扫描应用程序设置和云环境以获取配置值的设置管理类的示例,您可以查看Windows Azure项目的开源Lokad.CQRS(请参阅CloudSettingsProvider)


Gra*_*ler 7

您可以在Azure SDK 1.7中使用CloudConfigurationManager http://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager

首先查看ServiceConfiguration.cscfg,例如ServiceConfiguration.Cloud.cscfg进行配置设置.如果不存在,则会回退到web.config和app.config

例如

CloudConfigurationManager.GetSetting("StorageConnectionString")
Run Code Online (Sandbox Code Playgroud)

将在相应的cscfgfile中查找StorageConnectionString设置,然后它将搜索web.config,然后搜索app.config.


Igo*_*rek 6

我们有许多环境(开发结构中的本地开发,开发结构外部的本地开发,测试,发布有2个版本:发布/产品和发布/暂存和20个项目,其中一些需要在配置设置中有一些变化.我们解决了这个问题通过创建一个微小的"配置"项目的问题,包括与环境匹配的子文件夹.我们将文件从子文件夹中复制,具体取决于我们在每次编译期间对配置项目的根文件夹进行的构建.

所有其他项目链接到.config文件的配置项目.我们还使用部分配置文件来保持在各种环境中始终重复相同信息的精神错乱.

希望这可以帮助


小智 6

我对转换ServiceConfiguration有同样的要求.

我选择了jmac的答案(谢谢!),但在Base版本中遇到了命名空间问题:

<ServiceConfiguration serviceName="TestCloud2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
Run Code Online (Sandbox Code Playgroud)

经过多一点探讨后,安德鲁帕特森(谢谢你)发现了这一点.

所以我得到的转换文件:

<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>
Run Code Online (Sandbox Code Playgroud)