規劃開發網站時,通常會將共用的設定或是系統上線之後可以變更的共通值,置放在web.config組態檔中的設定,以方便將來網站系統真正上線之後,可以依照不同的需求來做設定。然而,當網站開發完成,實際上線之後會發現,在以下幾種情況之下都會重新啟動網站應用程式,進而造成使用者的狀態維護失效:
- 改、新增、刪除Bin目錄下的組件。
- 修改、新增、刪除App_GlobalResources或App_LocalResources目錄下的資源檔。
- 修改、新增、刪除Global.asax。
- 修改、新增、刪除App_Code目錄下的原始程式碼檔。
- 修改、新增、刪除Profile設定。
- 修改、新增、刪除App_WebReferences目錄下的Web參考。
- 修改、新增、刪除web.config。
其中,在正式上線環境中,以修改Web.config算是最常見的需求,那麼該如何設計讓管理者修改web.config設定檔時,不會影響到網站應用程式的運作?
答案就是:使用外部組態檔。
首先,先建立一份組態檔,例如命名為:external.config,把將來可能會隨時異動的設定資料,寫在這個組態檔中,譬如將來會隨時異動的是log的監控層級,是設定在appSettings項目中:
<?xml version="1.0"?>
<appSettings>
<add key="LogLevel" value="information" />
</appSettings>
ASP.NET V2.0以後的版本有提供新的項目屬性configSource,外部組態檔的引用可以透過configSource屬性值定所要引用的組態檔是哪一個外部檔案。使用外部組態檔有以下幾個優點:
- 可針對不同的項目設定,來規劃模組化的結構
- 因為是使用另一個設定檔,所以可以加強安全性控管
- 隨時改變外部組態檔,並不會重新啟動應用程式
web.config中項目的設定,加上configSource範例如下:
<appSettings configSource="external.config" />
有了這樣的設定區段,隨時都能改變系統功能的設定,而不會造成目前網站上的使用者發生狀態遺失等問題,這算是相當不錯的項目屬性;當然ASP.NET V2.0以後版本才有支援這個設定。
沒有留言:
張貼留言