【问题标题】:Best way to save dynamic web page configuration data in asp.net在 asp.net 中保存动态网页配置数据的最佳方法
【发布时间】:2014-10-08 14:25:58
【问题描述】:

我们有一个高度可配置的 asp.net Web 应用程序。不同的组(100+组)可以登录到应用程序。对于每个组,我们都有一个可配置的 xml 文件,其中包含有关如何显示页面的信息。当用户登录时,根据他们的组 id 和 xml 文件中的配置设置,将显示网页。

例如: 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>

在上面的例子中,Shape 和 Color 是文本框,Submit 是一个按钮。根据值(True 或 False),我们要么显示文本框,要么隐藏文本框,从而动态呈现网页。

到目前为止,将这种类型的数据保存在 app_data 文件夹中的 xml 文件中效果非常好。但是随着我们在每个页面上添加更多组和更多元素,管理每个 xml 文件以确保每个 xml 文件具有相同的元素和正确的值变得越来越困难(有数千个元素和 50 多个网页)。

我们尝试将这些数据保存在数据库的表中。但是,一次读取一个值进行如此多的数据库调用是昂贵的,并且页面的性能会降低。

我们尝试将这些数据保存在表格中,并在页面加载时将表格保存在数据表格会话变量中。但是这些配置设置可以被其他组更改。由于其他组所做的更改在刷新页面之前不会加载到当前用户的会话中,因此我们会得到不希望的结果。

我们还尝试使用 app_data 文件夹中的 excel 文件,并将其用作表格来一次读取一个值,因此即使其他组更改了值,我们总是会获得最新的值来呈现页面。不确定这是否是正确或优雅的解决方案。

存储此类配置信息的最佳方式是什么,这样即使有大量的读取和写入,页面的性能也不会降低,同时又足够容易管理所有组的所有这些配置设置?

【问题讨论】:

    标签: c# asp.net xml


    【解决方案1】:

    通常情况下,我会提倡使用数据库驱动的解决方案,但是,听起来好像您已经拥有了一个非常适合您并且经过验证的系统,所以暂时不要把它扔掉。如果我正确阅读了您的问题,那么您当前的 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 文件,因为它在源代码控制系统中的合并效果更好。

    我希望这会有所帮助。

    另一方面,如果您遇到性能问题,并且听起来好像您使用的是数据库驱动的解决方案,那么您可能需要对您的应用程序进行一些更改。无论您的设置如何存储,它们都应该只从数据库或文件系统中检索一次,最好是在应用程序启动时。应将设置读入以您的组名为键的哈希表或字典中,并在此期间缓存。如果它需要是动态的,那么您必须提供一些管理页面来使整个批次无效,或者最好只是让受影响的设置无效。

    阅读 Read-Through 缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-21
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2020-06-01
      • 1970-01-01
      相关资源
      最近更新 更多