1

在我的 IIS 中,我希望能够从外部文件加载一些变量。

从 web.config 中读取它们是可能的,但如果我想在不重新启动的情况下更新变量,则需要我编辑云中的所有 web.config 文件。
从集中式数据库中读取它们也是一种选择,但我的一些应用程序不需要连接。

为 IIS 管理应用程序变量的推荐方法是什么。
谢谢。

4

2 回答 2

1

推荐的方式是一个Web.config文件,这就是为什么有一个内置的appSettings部分。现在,就在不重新启动的情况下更新变量而言,您根本不必在云中编辑它们。在类似于 PROD 的测试环境中,在本地拥有这些文件的副本Web.config,然后先在那里更新它们。然后您可以测试这些更改并上传整个Web.config文件,这将导致应用程序池自动重置。

编辑

由于 OP 的评论,现在可以获得更多信息 - 另一个好的解决方案可能是利用machine.config而不是web.config那些需要在同一服务器上的多个网站上更改的设置,特别是如果应用程序看到更改对时间很敏感。

于 2013-06-11T14:04:01.060 回答
0

由于您不想重新启动应用程序(web.config 和 machine.config 都会这样做),我建议将其保留为可负责独立更新自身的自定义设置对象。考虑一个可序列化对象,其设置显示在 NameValueCollection 中(类似于 web.config 或 app.config 文件)。这将允许您类似地添加设置。需要考虑的一些步骤:

  1. 将共享目录添加到公共网络位置,以便您对所有网站只有一份文件本身的副本。类似的东西\\somecommonserver\shared\configuration\

  2. 将静态应用程序变量添加到代码库,以便每个应用程序池都记录文件更新的最后日期/时间 --> Application["CustomConfigLastUpdate"] = configFileInfo.LastWriteTimeUtc; (我建议使用 UTC,因为服务器时间可能不同,但 UTC 没有)

  3. 每次访问设置可能有点过于繁重,但在某个确定的时间间隔(每次访问,每 5/15/60 分钟,等等)检查configFileInfo.LastWriteTimeUtc属性是否大于存储在应用程序变量中的值,那么你需要去获取设置的新副本。

  4. [Serializable]使用该属性创建您的自定义对象,并为其提供一个LoadFromXmlFile方法,该方法接收文件名作为参数,其职责是重新填充自身。

我以前这样做是为了实现类似的目标,但我的办公室没有这些代码示例。这是一个很好的 SO 问题,其中包含描述类似行为的代码的相关答案:如何反序列化 XML 文档

于 2013-06-11T14:52:33.360 回答