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

时间:2011-05-12 14:30:01

标签: azure web-config connection-string azure-cloud-services azure-configuration

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

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

有谁知道怎么做?

3 个答案:

答案 0 :(得分:26)

在ServiceConfiguration.cscfg文件中添加:

<ServiceConfiguration ... />
  <Role ... />
    <ConfigurationSettings>
      <Setting name="DatabaseConnectionString" value="put your connection string here" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

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

然后,只要您需要检索连接字符串,就可以使用:

using Microsoft.WindowsAzure.ServiceRuntime;

...

String connString = RoleEnvironment.GetConfigurationSettingValue("DatabaseConnectionString")

您可能需要将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; 
}

This article has a more verbose explanation of the above.

答案 1 :(得分:3)

对于Entity Framework,您不需要提供providerName,它已经位于connectionstring中。它在azure设置中不起作用的原因是,它包含&amp; quot符号,需要将其转换回“在创建新的EntityConnection之前。你可以使用System.Web中的HttpUtility.HtmlDecode来完成它。

答案 2 :(得分:1)

基本上,您需要在Azure服务配置文件中定义这些设置。检查here。一旦定义,可以从Azure门户更改这些。