2009年10月24日 星期六

ASP.NET外部組態檔小密技

規劃開發網站時,通常會將共用的設定或是系統上線之後可以變更的共通值,置放在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屬性值定所要引用的組態檔是哪一個外部檔案。使用外部組態檔有以下幾個優點:

  1. 可針對不同的項目設定,來規劃模組化的結構
  2. 因為是使用另一個設定檔,所以可以加強安全性控管
  3. 隨時改變外部組態檔,並不會重新啟動應用程式

web.config中項目的設定,加上configSource範例如下:

<appSettings configSource="external.config" />

有了這樣的設定區段,隨時都能改變系統功能的設定,而不會造成目前網站上的使用者發生狀態遺失等問題,這算是相當不錯的項目屬性;當然ASP.NET V2.0以後版本才有支援這個設定。

沒有留言: