我有一個當前在Azure中的應用程序,每當我們將它推入暫存段時,我們都無法真正測試,因爲連接字符串指向了prod數據庫。在服務配置中設置應用程序ConnectionString而不是Azure中的web.config
有人向我提到,你應該能夠在ServiceConfiguration.cscfg文件中設置連接字符串,而不是(或使用)web.config文件。這樣,您可以在Azure門戶中更改連接字符串,而不是重新發布誰應用程序。
有誰知道如何做到這一點?
我有一個當前在Azure中的應用程序,每當我們將它推入暫存段時,我們都無法真正測試,因爲連接字符串指向了prod數據庫。在服務配置中設置應用程序ConnectionString而不是Azure中的web.config
有人向我提到,你應該能夠在ServiceConfiguration.cscfg文件中設置連接字符串,而不是(或使用)web.config文件。這樣,您可以在Azure門戶中更改連接字符串,而不是重新發布誰應用程序。
有誰知道如何做到這一點?
在你ServiceConfiguration.cscfg文件中加入:
<ServiceConfiguration ... />
<Role ... />
<ConfigurationSettings>
<Setting name="DatabaseConnectionString" value="put your connection string here" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>
現在你有一個連接字符串,您可以通過編輯蔚藍門戶網站的內部結構發生變化。
然後任何時候你需要檢索連接字符串,你可以使用做到這一點:
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;
}
基本上你需要在Azure服務配置文件中定義這些設置。檢查here。一旦定義,這些可以從Azure門戶進行更改。
對於實體框架,你並不需要提供的providerName,這裏面已經在ConnectionString。當它處於天藍色設置時,它不起作用的原因是,它包含&「符號」,在創建新EntityConnection之前需要將其轉換回「在System.Web中使用HttpUtility.HtmlDecode。」
此錯誤不允許指定連接提供者(實體框架所要求的),比如System.Data.EntityClient。有什麼想法? – 2012-02-28 07:12:53
@DaleAnderson,把它們放在web.config中。想不到一個更好的地方與EF:( – CMircea 2012-04-07 13:55:42
Yeh。我實際上發現web.config最適合那種東西 - 無需重新部署在測試場景中更改它,並且可以使用配置轉換輕鬆管理。 – 2012-04-08 04:31:41