2009-02-04 75 views
5

我正在將SQL服務器移動到單獨的機器上。目前我們正在同一個盒子上運行我們的Web服務器和SQL服務器。所以我們有一個帶有IIS和SQLServer的生產服務器,然後是一個獨立的開發服務器來反映這個設置。開發vs生產:連接字符串

當談到我們的asp.net控件的app.config和web站點的web.config時,這很好用,因爲我們可以使用「Initial Catalogue = MyDB; ...」,它的工作原理是因爲DB名稱是兩臺機器上都一樣。

現在我期待在運行這兩個數據庫對同一個盒子(MYDB,MYDB-DEV)。有沒有一種簡單的方法來做到這一點,而無需每次部署或編譯時都需要編輯web.config和app.config?這是Visual Source Safe可以處理的事情嗎?

回答

7

這是我使用的解決方案。在網上。配置,將下面的 「包括」 行:

<connectionStrings configSource="WebCS.config"/> 

然後,創建WebCS.config文件並輸入以下內容:

<connectionStrings> 
<add name="ConnString" 
    connectionString="Data Source=YourServer;Initial Catalog=YourDB;etc.. 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 

然後,在VS站點發布後,取出WebCS。配置文件(我有一個批處理文件來做到這一點),然後捆綁其他所有東西以便傳輸到新機器。然後你可以確信,所有的Web.Config文件設置都與你同時使用,而不會影響你的連接字符串。

+0

謝謝你接受我的回答。我希望它能像你一樣適合我! – 2009-02-04 21:16:45

1

我可能不會在這裏完全明白你的問題,但在我看來,當你部署應用程序,你可以簡單地不除非有在web.config中需要做出的改變重新部署的web.config 。換句話說,將所有文件複製到目錄,但 web.config文件除外。

如果你要改變部署之間的web.config文件,你需要編輯web.config每個服務器。

或者,你會發現每一臺機器上的另一個地方來存儲比web.config中其他的連接字符串。

4

部署的web.config是幾乎從來沒有將文件複製從開發到PROD的情況。有不同的條目是正常的,例如您的開發網站指向本地數據庫或開發數據庫框,您的prod網站通常必須指向您的prod數據庫框。

部署時,你生產的web.config通常只需要,如果你做了你的應用程序,需要新的配置元素的架構性變化或要刪除多餘的那些改變。

隨着源控制,通常的做法是排除的web.config和具有可以被用作用於創建配置文件的基礎的模板文件,例如web.config.template。在對web.config進行結構更改時,應對web.config.template進行更改,然後爲dev和prod創建副本,並相應地應用dev和prod設置。

2

我使用NAnt來構建和部署。我使用.config.template命名約定將我的.config文件製作成模板。我有一個名爲「environment」的NAnt屬性,我通過命令行調用來設置NAnt。在我的build.xml的頂部,我根據「environment」屬性設置了「db.connectionstring」屬性(如switch語句)。在構建任務中,我使用grep將「db.connectionstring」字符串推送到構建目錄輸出的模板中。這樣,我只需要撥打:

nant -D:environment=dev 

這會得到一個dev特定的.config文件集。

如果你不喜歡的grep,按照此:

http://www.haidongji.com/2008/11/11/use-nant-to-replace-values-in-other-xml-config-files/

爲XML文件裏,才能工作。 Grep更通用。我實際上有基於部署環境的不同數據庫名稱,而grep讓我可以根據環境將不同的數據庫名稱插入到SQL腳本中。

0

檢查出的ConnectionStrings元素的configSource屬性在web.config

應該可以很容易夠

0

我好清楚,當前的環境是兩臺服務器,即

開發應用/數據庫服務器
生產應用/數據庫服務器

,你在想使它像這樣

東西

應用服務器(開發+生產)
DB服務器(開發+生產)

如果是這樣的話,我爲您推薦隔離數據庫和應用程序分成兩個單獨的服務器 - 從單個服務器環境中移動時,這是第一步,因爲如果您需要羣集多個數據庫服務器,或者(更常見)在單個數據庫服務器前負載平衡多個Web服務器以幫助應用程序性能,它可以在稍後輕鬆升級。

話雖如此,我並不建議像這樣在同一臺服務器上並排運行開發和生產環境。雖然它在財務上可能是合理的,但是隔離開發環境的目的是爲了防止出現「開發錯誤」而不是生產過程,如果將一些錯誤代碼推送到開發環境中,這樣做可能會導致停機。

0

您可以將所有連接字符串放在web.config中,然後在應用程序的主要位置確定基於應用程序服務器使用哪一個字符串?

0

對於開發,請使用Web.Debug.config文件,對於生產,請使用Web.Release.config。每個可以定義它自己的單獨連接字符串。