2014-10-08 69 views
1

我們有一個高度可配置的asp.net web應用程序。不同的組(100多個組)可以登錄到應用程序。對於每個組,我們都有一個可配置的xml文件,其中包含有關如何顯示頁面的信息。當用戶根據他們的組ID和xml文件中的配置設置登錄時,顯示網頁。在asp.net中保存動態網頁配置數據的最佳方法

例如: Group1.xml

<Group1> 
<item key="Shape" value="True" /> 
<item key="Color" value="False" /> 
<item key="Submit" value="False" /> 
<Group1> 

Group2.xml

<Group2> 
<item key="Shape" value="True" /> 
<item key="Color" value="True" /> 
<item key="Submit" value="True" /> 
<Group2> 

在上面的例子,形狀和顏色是文本框和提交是一個按鈕。根據值(True或False),我們顯示文本框或隱藏文本框,從而動態呈現網頁。

將此類型數據保存在app_data文件夾中的xml文件中,迄今爲止效果很好。但是,隨着我們在每個頁面上添加更多組和更多元素,管理每個xml文件以確保每個xml文件具有相同的元素和正確的值變得越來越困難(有數千個元素和50多個網頁)。

我們嘗試將此數據保存在數據庫的表中。但是,進行如此多的數據庫調用來逐個讀取值是非常昂貴的,並且頁面性能下降。

我們嘗試將此數據保存在表中,並在加載頁面時將表保存在數據表會話變量中。但是這些配置設置可以被其他組更改。由於其他組所做的更改不會被加載到當前用戶的會話中,直到他們刷新頁面爲止,所以我們得到了不理想的結果。

我們還嘗試在app_data文件夾中使用excel文件,並將其用作表格一次讀取一個值,所以即使其他組更改值,我們也始終會獲取最新的值以呈現頁面。不知道這是否是正確或優雅的解決方案。

什麼是存儲這種類型的配置信息的最佳方式,即使有大量的讀寫操作,頁面的性能也不會降低,並且同時很容易管理所有組中的所有這些配置設置?

回答

0

通常情況下,我會主張一個數據庫驅動的解決方案,但是,聽起來好像您已經有一個適合您的系統,並且已經得到驗證,所以不要將其丟棄。如果我正確地閱讀你的問題,你當前的xml驅動設置工作正常,解決方案可以擴展。

您的問題與運行時間性能或準確性沒有太大關係,所以不要更改它。

相反,它是與您如何管理這些XML文件。幾個簡單的問題:

它是一個應用程序與50左右的網頁,而不是很多的應用程序? 每個組都有類似的設置,只是不同的值?

如果對這兩個問題的答案是肯定的,那麼你應該嘗試ConfigGen。 它是爲生成特定於機器的app.config和web.config文件而開發的,但它可以很容易地用於生成任何設置文件。

它的工作方式是你有一個令牌化的XML模板。

<?xml version="1.0" encoding="utf-8"?> 
<group name="[%groupName%]"> 
    <item key="Shape" value="[%shape%]" /> 
    <item key="Color" value="[%color%]" /> 
    <item key="Submit" value="[%submit%]" /> 
</group> 

您還有一個電子表格或csv文件,其中包含每個組的每行和每個設置的列。組設置進入該電子表格,並且列名稱與模板文件中的標記相匹配。

MachineName ConfigFilePath groupName shape color submit 
Default  default.xml  defaultgroup True  True  True 
Group1   Group1.xml  Group1  True  False False 
Group2   Group2.xml  Group2  True  True  True  

在構建時(不是運行時)configGen使用這兩個文件爲每個組生成一個輸出配置。

這使得管理每個組的設置變得非常簡單,您不必更改應用程序代碼的單行。在excel中通過列向下看,並在一個地方檢查您的設置是非常容易的。我個人更喜歡使用csv文件,因爲它在源代碼控制系統中更好地融合。

我希望這會有所幫助。另一方面,如果您遇到性能問題,聽起來好像您使用了數據庫驅動的解決方案,那麼您可能需要對應用程序進行一些更改。無論您的設置如何存儲,只能從數據庫或文件系統中檢索一次,最好在應用程序啓動時檢索。這些設置應該讀入一個散列表或字典中,並在該組名稱上鍵入並在該持續時間內進行緩存。如果它需要動態的,那麼你將不得不提供一些管理頁面來使整個地段失效,或者最好只是受影響的設置。

閱讀快速讀取緩存。

相關問題