17

我有一個當前在Azure中的應用程序,每當我們將它推入暫存段時,我們都無法真正測試,因爲連接字符串指向了prod數據庫。在服務配置中設置應用程序ConnectionString而不是Azure中的web.config

有人向我提到,你應該能夠在ServiceConfiguration.cscfg文件中設置連接字符串,而不是(或使用)web.config文件。這樣,您可以在Azure門戶中更改連接字符串,而不是重新發布誰應用程序。

有誰知道如何做到這一點?

回答

26

在你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; 
} 

This article has a more verbose explanation of the above.

+1

此錯誤不允許指定連接提供者(實體框架所要求的),比如System.Data.EntityClient。有什麼想法? – 2012-02-28 07:12:53

+0

@DaleAnderson,把它們放在web.config中。想不到一個更好的地方與EF:( – CMircea 2012-04-07 13:55:42

+0

Yeh。我實際上發現web.config最適合那種東西 - 無需重新部署在測試場景中更改它,並且可以使用配置轉換輕鬆管理。 – 2012-04-08 04:31:41

1

基本上你需要在Azure服務配置文件中定義這些設置。檢查here。一旦定義,這些可以從Azure門戶進行更改。

3

對於實體框架,你並不需要提供的providerName,這裏面已經在ConnectionString。當它處於天藍色設置時,它不起作用的原因是,它包含&「符號」,在創建新EntityConnection之前需要將其轉換回「在System.Web中使用HttpUtility.HtmlDecode。」

相關問題