我有一个 ASP.NET 应用程序,需要存储一些设置。
除其他外,这些设置是我的应用程序中显示的页面上的标题。标题会定期更改(每周左右),我想知道如何以聪明的方式做到这一点:
将设置保存在
web.config
(读取时间慢,并且必须重新启动应用程序才能检测更改)。将设置保存在数据库中。
我自己的 XML 文件(例如自己的 XML 文件中的自定义配置部分)。
我正在寻找任何可以为我指明更好方向的东西。
你会怎么办?
我有一个 ASP.NET 应用程序,需要存储一些设置。
除其他外,这些设置是我的应用程序中显示的页面上的标题。标题会定期更改(每周左右),我想知道如何以聪明的方式做到这一点:
将设置保存在web.config
(读取时间慢,并且必须重新启动应用程序才能检测更改)。
将设置保存在数据库中。
我自己的 XML 文件(例如自己的 XML 文件中的自定义配置部分)。
我正在寻找任何可以为我指明更好方向的东西。
你会怎么办?
这里有两个问题:
存储设置。
存储每个页面上显示的动态值。
如果您要存储应用程序设置,那么我会使用自定义配置部分。它允许您为设置创建有意义的名称,而不是使用key/value
配对方法web.config
。您可以将此自定义配置部分粘贴在其自己的 XML 文件中,并在您的web.config
.
如果您要存储动态数据(而不是应用程序设置),那么如果您已经拥有一个数据库,我会使用数据库。
原因是 web.config 是用来保存设置的。您可以使用它来保存键/值页面对,但这很麻烦。真正的动态数据应该与任何其他数据库数据一起保存在数据库存储中。您提到了这一点,因此如果这是您要存储的数据类型,那么使用数据库最有意义。页面标题不是应用程序设置,它们是动态数据。如果是本地化数据,那就另当别论了,但你没有给出任何迹象表明它是。
这web.config
是您存储与应用程序相关的信息的地方,即应用程序不能没有的配置。因此,database server name
可以,但page name of the default.aspx
不行。
在我看来,其他两个选项是相同的,只有当管理员更改标题时,才更容易在记事本中更新 XML 文件,而不是 SQL 服务器中的数据库表(除非你有一个很好的 GUI 来更新它)。
编辑:你不应该害怕web.config
读取时间很慢 - 只有当你“触摸”它时,文件才会重新加载,也就是说,当文件的“修改”属性发生变化时。
为什么不使用 umbraco 作为您所有网站内容/设置的内容管理系统?
Umbraco 位于 asp .net 站点的后台,直到您决定集成特定元素。
您甚至可以在没有代码/设置更改的情况下安排对页面的更改,因为它们听起来更像是内容元素。
纯粹基于它们每周左右更改的事实,我会将它们存储在数据库中,并创建一个页面来管理这些值。
不过这里有很多因素。需要考虑的一件事是,更改配置设置确实会导致应用程序重新启动,因为 ASP.NET 仅在启动时读取配置设置,然后在此期间缓存它们。不断更改配置文件可能会导致孤立会话等问题。这不太可能,但可能。
在服务器上使用不属于 .NET 配置设置的 xml 文件可以解决这个问题,但编辑它更容易出错,并且需要为每个请求读取它。
创建一个页面来管理这些值是更多的初始工作,但我认为从长远来看它会有所回报。
我会使用数据库。
正如其他人所说,web.config
它实际上仅适用于应用程序级设置。
XML 文件的一个问题是,如果您决定迁移到负载平衡方案,那么您必须担心如何将该文件从一台服务器复制到另一台服务器。从可扩展性和安全性的角度来看,在 Web 层的文件系统中没有任何应用程序动态数据被认为是最佳实践(如果您希望能够更新文件,这意味着您必须允许您的 Web 应用程序具有写入权限)访问本地文件系统,这是一个安全风险)。
将它放在数据库中可以让您在应用程序首次启动时读取一次。然后,您可以使用 SqlDependency 或 SqlCacheDependency 将其全部或部分缓存在内存中,以便代码在 DB 表更改时收到通知(如果必须,您可以对 XML 文件执行类似的操作)。
With the info in the DB, you can more easily add a load balanced server later, if you need to, and your web app can stay read-only.