Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net中保存动态网页配置数据的最佳方法_C#_Asp.net_Xml - Fatal编程技术网

C# 在asp.net中保存动态网页配置数据的最佳方法

C# 在asp.net中保存动态网页配置数据的最佳方法,c#,asp.net,xml,C#,Asp.net,Xml,我们有一个高度可配置的asp.net web应用程序。不同的组(100多个组)可以登录到应用程序。对于每个组,我们都有一个可配置的xml文件,其中包含如何显示页面的信息。用户登录时,将根据其组id和xml文件中的配置设置显示网页 例如: Group1.xml <Group1> <item key="Shape" value="True" /> <item key="Color" value="False" /> <item key="Submit"

我们有一个高度可配置的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>

在上面的示例中,形状和颜色是文本框,提交是按钮。基于这些值(真或假),我们要么显示文本框,要么隐藏文本框,从而动态呈现网页

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

我们尝试将这些数据保存在数据库的一个表中。但一次调用这么多数据库来读取一个值是非常昂贵的,而且页面的性能会降低

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

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


存储此类配置信息的最佳方式是什么,这样即使有大量的读写操作,页面的性能也不会降低,同时可以轻松地跨所有组管理所有这些配置设置

通常情况下,我会提倡数据库驱动的解决方案,但是,听起来好像您已经有了一个适合您的系统,并且已经过验证,所以现在不要放弃它。如果我正确地阅读了您的问题,那么您当前的xml驱动设置运行良好,解决方案的规模也可以

您的问题不在于运行时性能或准确性,所以不要改变这一点

而是如何管理这些xml文件。几个简短的问题:

是一个50页左右的应用程序,而不是很多应用程序? 是否每个组都有相似的设置,只是值不同

如果这两个问题的答案都是肯定的,那么你应该试试。 它是为生成特定于机器的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>
在构建时(非运行时),configGen使用这两个文件为每个组生成输出配置

这使得管理每个组的设置非常简单,并且您不必更改应用程序代码的任何一行。在excel中,向下查看列并在一个位置检查设置非常容易。我个人更喜欢使用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