【问题标题】:Where to store .NET application settings.NET 应用程序设置的存储位置
【发布时间】:2014-03-06 18:30:58
【问题描述】:

我有一个 .NET 应用程序,它需要引用一个全局应用程序变量(一个数字),应用程序使用它来允许/禁止用户输入某个日期之前的事件。目前我有

<appSettings>
    <add key="beginDateRangeDays" value="60" />
    <add key="endDateRangeDays" value="30" />
</appSettings>

在我的 Web.config 中。我希望管理员用户能够通过管理员网页定期修改这些值。如果我允许这样做,每次他们进行更改时,我的应用程序池都会重新启动。

您建议将其存储在哪里?在外部配置文件中?但这也会导致应用程序池重启吗?我应该在应用程序的数据库中使用配置表吗?

【问题讨论】:

  • 我认为配置表在这里很有意义,特别是因为您想允许网络访问。
  • 如果您担心强制重启应用程序池,我会将其存储在数据库的表中。
  • 这感觉有点宽泛。回答您的问题:您不能将其存储在web.config 将接收到的任何地方。它是什么类型的应用程序? ASP.NET? ASP.NET MVC?这听起来像是可以存储在您已经用于项目的任何持久性机制中的东西。您的 Web 配置应该用于在应用程序的生命周期内不会改变的变量;所以这将是一个放置全局变量的糟糕地方。
  • 这听起来更像是用户的设置而不是全局应用程序设置。因此,您应该为每个用户在数据库中腾出一些空间。并且可能在 Global.asax 中设置默认值初始化。

标签: c# asp.net .net web-config


【解决方案1】:

我希望管理员用户能够通过管理员网页定期修改这些值

数据库,当然。配置文件是存储非静态值的方便位置,但并不总是最好的位置。退后一步,考虑两个这样的值“桶”:

  1. 用户可以在应用程序的任何给定实例中更改的逻辑配置。
  2. 基础设施配置,定义应用程序的任何给定实例及其与周围环境的关系。

前者最好保存在应用程序的数据库中,后者最好保存在配置文件中。前者可能包含如下值:

  • 今年有节假日
  • 用于计算业务数据的值
  • 用户表单的默认值

虽然后者可能包含以下值:

  • 数据库连接字符串
  • 外部 Web 服务的 URL
  • 服务帐户的凭据

让用户在不破坏应用程序的情况下更改他们可以更改的内容,并在数据库中跟踪这些更改。将基础架构详细信息保留在配置文件中,因为对这些详细信息的更改很可能无论如何都需要重新启动应用程序池。

【讨论】:

  • 所有非常有效的点。在我们的许多表格中,我们跟踪最后一个修改或添加值的人的日期和用户戳。我也可以将它添加到我的新配置表中。我同意,web.config 是一个简单的地方,可以通过文本编辑器轻松编辑,但这些值不应该不断变化。
【解决方案2】:

您应该能够设置应用程序设置,以便它们可以在 IIS 中进行编辑。请参阅这篇 TechNet 文章:

http://technet.microsoft.com/en-us/library/cc753062(v=ws.10).aspx

【讨论】:

  • 我不希望我的非技术人员通过 IIS 进行更改。
  • 不知道他们是非技术人员。一定是误读了,“我希望管理员用户能够修改这些值”——你应该把它放在数据库中
【解决方案3】:

如果您将其存储在数据库中,那么您就可以控制谁以及何时访问它。那么你就不用担心重启应用池了。

【讨论】:

    猜你喜欢
    • 2011-02-26
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2016-11-16
    • 2011-08-05
    • 2011-06-10
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多