2014-07-01 85 views
2

我有一個使用mvc5的C#web應用程序。它目前運行在Azure上,我有一個開發,測試和生產實例。我需要做些什麼來確保數據庫連接字符串會在應用程序被推送到每個環境時自動更改?我知道這可以通過web.config來完成,因爲您可以定義Web.Debug.Config等,但是我將如何解決Azure上不同的工作角色?我一直在互聯網上尋找解決方案。簡而言之,我想要使用與多個web.config文件相同的方法,但對於Azure。部署到多個Azure環境(開發,測試,生產)的推薦方法是什麼?

作爲一些額外的背景,對於我的解決方案,我已將我的存儲庫分解爲一個單獨的項目,並且我試圖從配置文件中獲取連接字符串(讓我們假設domain.dll是包含庫的名稱它)。首先,當我只使用web.config時,但是當我必須從另一個輔助角色運行我的域DLL文件時,配置開始返回null;因爲這個代碼在從不同的工作進程(非web)運行時不會運行。這似乎引入了一個有趣的問題,如果我需要在網絡之外和Azure之外使用domain.dll代碼,該怎麼辦?如何維護Azure和web.config提供的連接字符串好處?

回答

1

假設:您使用的網絡服務,而不是網絡-Sites。它們是有區別的。

有2種方式來獲得你所需要的:

  1. 對於工作者角色,你可以做app.config轉換幾乎在你web.config做同樣的方式。只有你需要用SlowCheetah來完成。有一個nuget包,也有VS擴展來創建轉換文件。這種方法存在太多的問題。我從來不喜歡它,所以繼續第二種選擇。

  2. 如果您運行Web-Services,則可以將連接字符串指定爲工作角色配置的一部分。轉到您的Azure項目和你的工人角色的開放性: Worker Role configuration

在那裏,你可以添加數據庫連接字符串。併爲您運行的每個環境(開發,測試,產品)創建一個配置。併爲每個環境放置不同的連接字符串。

爲了讓您連接字符串你執行:

CloudConfigurationManager.GetSetting("DatabaseConnectionString") 

一旦你的網站部署,你會在Azure的門戶網站Configure標籤上看到這些配置值。

+0

我正在使用網站。 – user1790300

+0

「角色」從哪裏來?你如何在web上下文之外執行後臺進程? WebJobs? – trailmax

+0

我的歉意,我有點困惑。上面例子中的「DatabaseConnectionString」是否會用於開發,測試和生產,或者您需要爲每個連接使用不同的字符串名稱。對於上面的示例來說,您需要爲每個連接使用不同的名稱?另外,如果情況並非如此,確定環境何時發生變化的邏輯是什麼?我看到「服務配置」下拉列表,但這樣就足夠了嗎? – user1790300

1

您應該區分「在發佈模式下構建」和「部署到環境X」。

建立在發佈模式應該只是將您的配置文件轉換爲「生產就緒」。使用MsDeploy you can parameterize your configuration files進行部署時,它們將充滿您提供給您的MsDeploy腳本的參數。

沒有靈丹妙藥會自動改變你的每個環境的連接字符串等。但通過這種方式,您可以標準化您的流程,這對您的產品的穩定性有很大的幫助。

需要注意的一件事是,部署的參數化將會破壞Visual Studio中簡單的工作流程「發佈」,因爲在發佈嚮導期間您沒有給出選項來填寫參數。 :'(

1

您應該通過湛藍的門戶網站,而不是通過配置文件轉換管理連接字符串和MVC應用程序,這將是很容易,去的配置選項和設置您的連接字符串有configureconnection strings

。對於網絡作業等項目,使用Microsoft.WindowsAzure.ConfigurationManager其中

提供了一個統一的API來加載配置設置,無論 其中應用程序託管 - 無論是內部部署還是在雲 服務

+0

運行模擬器時,這也可以工作嗎? – user1790300

相關問題