2014-10-08 72 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文件,因为它在源代码控制系统中更好地融合。

我希望这会有所帮助。另一方面,如果您遇到性能问题,听起来好像您使用了数据库驱动的解决方案,那么您可能需要对应用程序进行一些更改。无论您的设置如何存储,只能从数据库或文件系统中检索一次,最好在应用程序启动时检索。这些设置应该读入一个散列表或字典中,并在该组名称上键入并在该持续时间内进行缓存。如果它需要动态的,那么你将不得不提供一些管理页面来使整个地段失效,或者最好只是受影响的设置。

阅读快速读取缓存。

相关问题