在IIS上管理应用程序变量/属性

时间:2013-06-11 13:59:43

标签: c# .net iis

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

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

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

2 个答案:

答案 0 :(得分:1)

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

修改

由于OP的评论现在提供了更多信息 - 另一个好的解决方案可能是利用machine.config代替web.config来处理那些需要在同一台服务器上的多个网站上进行更改的设置,特别是如果时间敏感,应用程序会看到变化。

答案 1 :(得分:0)

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

  1. 将共享目录添加到公共网络位置,这样您只能为所有网站提供该文件的1份副本。像\\somecommonserver\shared\configuration\

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

  4. 每次访问设置可能有点太重,但是在某个确定的时间间隔(每次访问,每5/15/60分钟,无论如何)检查configFileInfo.LastWriteTimeUtc属性是否大于存储在应用程序变量中的内容,然后您需要获取设置的新副本。

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

  6. 我之前已经完成了这个目标,但是我的办公室里没有这些代码示例。这是一个很好的SO问题,它与描述类似行为的代码有相关的答案:How to Deserialize XML document