在Service配置中设置应用程序ConnectionString,而不是在Azure中设置web.config

And*_*ndy 17 connection-string web-config azure azure-configuration azure-cloud-services

我目前在Azure中有一个应用程序,每当我们将它推入Staging段时,由于连接字符串指向prod数据库,我们无法真正测试.

有人向我提到,您应该能够在(而非)web.config文件中设置ServiceConfiguration.cscfg文件中的连接字符串.这样,您可以更改Azure门户中的连接字符串,而不是重新发布who app.

有谁知道如何做到这一点?

Dav*_*ele 26

在ServiceConfiguration.cscfg文件中添加:

<ServiceConfiguration ... />
  <Role ... />
    <ConfigurationSettings>
      <Setting name="DatabaseConnectionString" value="put your connection string here" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过编辑azure门户中的配置来更改连接字符串.

然后,只要您需要检索连接字符串,就可以使用以下方法执行此操作:

using Microsoft.WindowsAzure.ServiceRuntime;

...

String connString = RoleEnvironment.GetConfigurationSettingValue("DatabaseConnectionString")
Run Code Online (Sandbox Code Playgroud)

您可能需要将Microsoft.WindowsAzure.ServiceRuntime.dll添加到您的引用.

RoleEnviroment.IsAvailable 可用于测试您是否在Azure中运行,如果不是,则回退到您的web.config设置.

using System.Configuration;
using Microsoft.WindowsAzure.ServiceRuntime;

...

if (RoleEnvironment.IsAvailable)
{
    return RoleEnvironment.GetConfigurationSettingValue("DatabaseConnectionString");
}
else
{
    return ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString; 
}
Run Code Online (Sandbox Code Playgroud)

本文对上述内容有更详细的解释.

  • 这个名为"Microsoft.WindowsAzure.ConfigurationManager"的Microsoft nuget包解决了这个问题.在这里阅读更多内容:http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.cloudconfigurationmanager.aspx (4认同)