我最近参与修补了一个Web应用程序项目,并注意到之前的开发人员使用数据库表进行配置设置而不是web.config(app.settings)。
我应该使用哪个? web.config或数据库表?哪个最好?
答案 0 :(得分:7)
在以下情况下,应该进入web.config:
它们是必须可用于使数据库可用的东西(数据库连接字符串!)
如果它们发生变化,您希望应用程序池刷新,或者几乎不可能更改。
当数据库因任何原因不可用时(例如电子邮件地址列表和用于向其发送错误消息的smtp服务器或日志文件所属的位置),它们是需要可用的东西
在以下情况下,应该进入数据库:
您的数据库和您的网络层都使用该配置。
您需要能够动态更改配置,而无需强制刷新应用程序池。
那就是说 - 如果您要将配置放在数据库中,您可能希望以某种方式将其缓存在Web层中,这样您就不会不必要地访问数据库。我建议使用Cache类。
除上述所有内容外,您还需要考虑贵公司的服务器使用政策。如果您非常非常难以使用db,那么将内容放入web.config可能更有意义,反之亦然。
答案 1 :(得分:2)
使用数据库进行设置的一个优点是可以在不中断生产网站的情况下即时更改内容。
对web.config文件的更改将导致IIS上的工作进程回收并重新启动应用程序。如果您正在使用InProcess会话,那些会丢失。这可能会破坏您的网站用户。
答案 2 :(得分:2)
我们结合使用web.config设置和数据库级别设置。
对于每个设置,我们会询问以下问题:“此设置是否特定于运行应用程序的计算机?”如果是,则进入web.config。如果没有,那么我们会问另一个问题:“如果更改此设置,应该强制重启应用程序吗?”如果是,web.config。我们的服务水平协议通常不接受重启。
我们的大多数应用程序都是多租户和/或在Web场中运行。简单的事情,如本地文件系统路径,日志记录级别或数据库连接字符串都在web.config中。原因是这些处理特定于该机器的资源。
几乎所有其他内容都会影响程序执行,并且必须可以访问应用程序和数据层。此外,其他应用程序往往需要它们(假设多个应用程序访问同一个数据库)。
答案 3 :(得分:1)
为什么上一篇是有道理的。 dev使用DB进行设置,请使用它。你必须有一个web.config,我认为如果没有它,ASP.NET就无法工作。项目配置设置应该进入web.config(自定义控件的声明,附加程序集等...),但是数据库中的用户设置或任何特定的业务逻辑可能会更好。
答案 4 :(得分:1)
我公司的开发人员和DBA之间存在争议的问题。
在我看来,您应该始终将配置文件用于应用程序级别的只读设置。如果设置是用户特定的或在运行时可编辑,您可能想也可能不想重新考虑该方法。
我见过在存储过程内部使用的数据库中存储设置的情况。我可以看到一些理由,但这并不重要,因为值可以通过参数传递给过程。
答案 5 :(得分:1)
一个考虑因素可能是,部署Web应用程序后,开发人员无法再访问生产环境中的web.config
文件。
如果他偶尔需要查看设置以提供任何形式的支持,将设置放在他可以获得配置表的只读权限的数据库中可能会有很多意义。
答案 6 :(得分:0)
争用数据库的一个用例是负载均衡的应用程序,如Web场。可能有一些与单个计算机相关的设置与服务器场中的其他计算机不同,需要进入web.config,但可能会有一大堆设置在整个服务器场中应该是相同的。该服务器场应该看起来像是来自外部的单个应用程序,如果它可以像单个机器一样配置,则可以从中受益。这意味着某种共享存储库,如数据库。