2009-10-22 119 views
3

我有一個具有超過200個配置設置的Web應用程序。這些控制從UI到業務邏輯的所有內容。在asp.net web應用程序中處理配置設置

這些應該在應用程序啓動時還是需要時檢索?

它們是否應該在需要時使用ISettings接口注入。

你的意見是什麼?

更新: 這些可以在應用程序中打開和關閉,以便它們存儲在數據庫中。有些是每個用戶設置,有些是應用程序範圍。現在的想法?

回答

0

我們也有很多配置設置。我們將它們存儲在中央數據庫表中。在首次訪問時,我們從數據庫中加載它們,並將它們存儲在緩存中,絕對過期1分鐘。這使我們可以擁有內存中的配置設置副本,同時還允許我們推送最多1分鐘內將應用的配置更新。

所以,這是一種混合。在第一次請求配置設置時,它們全部加載並存儲在緩存中。這個操作相當輕量,所以每分鐘發生一次對我們來說不是什麼大問題。

您的里程可能會有所不同。

+0

這似乎更像我們想要做的事情。數據庫中的200行不會花費那麼長時間才能檢索。你只有一個緩存與配置設置的對象? – Schotime 2009-10-22 07:40:43

0

MSDN ISettings用於託管VS Tools - > Options中的設置。看起來並不像一個網絡應用程序的好候選人。 通常使用ConfiguraionManager.Appsettings [「keyname」]按需加載應用程序設置以獲取指定鍵的最新值。如果您確定在應用程序處於活動狀態時該值永遠不會更改,但您可以隨時在Application_start上緩存設置,但每次使用ConfigurationManager.AppSettings [「keyname」]從web.Confg讀取它的好處在於: ASP.NET運行時將檢測對web.config的更改(例如,當您修改應用程序設置值時)併爲您提供該密鑰的最新值。

6

我會根據需要檢索它。 ASP.NET會自動爲您緩存這些數據。它不會每次都讀取一個文件。嘗試在運行時更改web.config文件,您會發現它會殺死所有會話並有效地重置您的應用。

不要過於複雜這一點。這些設置在web.config中的意圖是用於您需要訪問的整個應用程序的設置。 MS爲您提供了訪問它們的庫,並已完成儘可能快地完成該過程的工作。也許如果你有成千上萬的設置或者你可能會找到一個更好的緩存算法,但這將是一個罕見的情況。

在代碼的其他部分花費您的時間,因爲在更改訪問web.config應用程序設置的方式方面沒有太多好處。

更新: 如果設置在應用程序範圍內,則使用web.config。如果它們是用戶特定的並存儲在數據庫中,那麼在登錄時將它們存儲在用戶的會話中。有些人說要使用Cookie進行用戶特定的設置,但如果您知道用戶是誰,那麼使用會話會更好,因爲它會防止大型cookie被該用戶的每個請求發回服務器。

4

我同意Kelsey,不要過分複雜的東西,只是使用。用於檢索值的.NET框架類。 Web.config通常是你要保存它們的地方。
我會建議但訪問創建一個簡單的靜態類:

using System.Configuration // Add a reference for this... ; 

public static class Config 
{ 
    public static string DbConnection 
    { 
    get 
    { 
     return ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    } 
    } 

    public static string SomeValue 
    { 
    get 
    { 
     return ConfigurationManager.AppSettings["SomeValue"].ToString(); 
    } 
    } 
} 

它會給你強類型的值,並方便地訪問。你也可以用這樣的類來執行某種驗證。非常便利。 如果您稍後決定不使用web.config,則可輕鬆更改此類以檢索其他地方的值。

相關問題