ASP.NET和存储动态数据 - XML还是数据库?

时间:2010-01-02 18:13:31

标签: .net asp.net asp.net-3.5 appsettings

我有一个ASP.NET应用程序,需要存储一些设置。

除其他外,设置是我的应用程序中显示的页面上的标题。标题会定期更改(每周左右),我想知道如何以聪明的方式做到这一点:

  1. 保存web.config中的设置(慢读取时间,必须重新启动应用程序以检测更改)。

  2. 将设置保存在数据库中。

  3. 我自己的XML文件(例如自己的XML文件中的自定义配置部分)。

  4. 我正在寻找可以指向更好方向的任何事情。

    你会做什么?

5 个答案:

答案 0 :(得分:1)

这里有两个问题:

  1. 存储设置。

  2. 存储每页显示的动态值。

  3. 如果您要存储应用程序设置,那么我会使用Custom Configuration Section。它允许您为设置创建有意义的名称,而不是key/value使用的web.config对方法。您可以将此自定义配置部分粘贴在自己的XML文件中,并在web.config

    中引用它

    如果您要存储动态数据(不是应用程序设置),那么如果您已有数据库,我会使用数据库。

    原因是web.config旨在保存设置。您可以使用它来保存键/值页面对,但这很麻烦。真正的动态数据应与任何其他数据库数据一起保存在数据库存储中。您提到过,因此如果您将要存储的数据类型使用数据库最有意义。页面标题不是应用程序设置,它们是动态数据。如果它是本地化数据,那么这是一个不同的故事,但你没有给出任何迹象表明它。

答案 1 :(得分:1)

web.config是存储与应用程序相关的信息的地方,即应用程序不能没有的配置。因此,database server name是正常的,但page name of the default.aspx不正常。

在我看来,其他两个选项是相同的,只有当管理员更改了标题时,才能更容易更新记事本中的XML文件,而不是SQL服务器中的数据库表(除非你有一个很好的GUI来更新它)。

编辑:您不应该害怕web.config读取时间较慢 - 只有在您“触摸”文件时,即文件的“已修改”属性发生更改时,才会重新加载文件。

答案 2 :(得分:0)

为什么不将umbraco用作所有网站内容/设置的内容管理系统?

Umbraco位于asp .net网站的背景中,直到您决定整合特定元素。

您甚至可以安排更改页面而不需要代码/设置更改,因为它们听起来更像是内容元素。

答案 3 :(得分:0)

纯粹基于每周更改它们的事实,我将它们存储在数据库中,并创建一个页面来管理值。

但这里有很多因素。需要考虑的一件事是,更改配置设置会导致应用程序重新启动,因为ASP.NET仅在启动时读取配置设置,然后在持续时间内缓存它们。不断更改配置文件可能会导致孤立会话和诸如此类的问题。这可能不是非常,但可能。

在服务器上使用xml文件,这不是.NET配置设置的一部分,可以解决这个问题,但编辑它更容易出错,并且每次请求都需要读取它。

创建一个用于管理值的页面是更初始的工作,但我认为从长远来看它会得到回报。

答案 4 :(得分:0)

我会使用数据库。

正如其他人所说,web.config仅适用于应用程序级设置。

XML文件的一个问题是,如果您决定转向负载平衡方案,那么您必须担心如何将该文件从一个服务器复制到另一个服务器。从可扩展性和安全性角度来看,它被认为是在Web层的文件系统中没有任何应用程序动态数据的最佳实践(如果您希望能够更新文件,则意味着您必须允许您的Web应用程序进行写入访问本地文件系统,这是一个安全风险)。

将其放入数据库可让您在应用首次启动时阅读一次。然后,您可以使用SqlDependency或SqlCacheDependency将全部或部分内容缓存在内存中,以便代码在DB表更改时收到通知(如果必须,您可以使用XML文件执行类似操作)。

使用数据库中的信息,您可以在以后更轻松地添加负载平衡服务器(如果需要),并且您的Web应用程序可以保持只读状态。