【问题标题】:How do I reload asp.net configuration file cache?如何重新加载 asp.net 配置文件缓存?
【发布时间】:2016-05-29 13:06:06
【问题描述】:

我有一个 asp.net 应用程序,它将 web.config 中 rewriteRules 元素上的 configSource 属性设置为指向单独的配置文件:

<rewrite>
    <rules configSource="App_Data\Config\RewriteRules.config" />
</rewrite>

我的 Web 应用程序以编程方式对 RewriteRules.config 文件进行了编辑,但我的 Web 应用程序在编辑和保存文件后没有获取配置更改。

我在编辑文件后尝试调用HttpRuntime.UnloadAppDomain()。这成功地重新启动了我的应用程序域,但是 RewriteRules.config 中的更改仍然没有被拾取。我尝试将 RestartOnExternalChanges="true" 添加到 rewrite 元素,但这显然不支持 IIS rewrite 模块。我也试过ConfigurationManager.RefreshSection("rewrite/rules"),但这似乎没有任何效果。使更改生效的唯一方法是编辑并保存主 web.config 文件,但出于安全原因,我试图避免以编程方式执行此操作。

我很困惑为什么HttpRuntime.UnloadAppDomain() 不会导致重新读取外部配置文件。这是预期的行为吗?配置文件缓存是否以某种方式存在于应用程序域的范围之外?有什么实用的方法可以实现我想要做的事情吗?

【问题讨论】:

    标签: asp.net web-config url-rewrite-module


    【解决方案1】:

    老兄,你的情况的问题是,相关的configSection定义在定义中没有标记为restartOnExternalChanges="true"。例如;我们创建了一个自定义配置部分,用于将应用程序 url 存储在外部文件中,并在 web.config 文件中创建一个部分定义,例如

    <section name="pageUrlFormats" type="Kahia.Web.Configuration.PageUrlFormats.PageUrlFormatsSection, Kahia.Web" restartOnExternalChanges="true" requirePermission="false" />
    

    以便asp.net知道相关文件是否发生任何变化:

    <pageUrlFormats configSource="Config\PageUrlFormats.config" />
    

    应用程序域重新启动。这适用于所有配置部分定义,包括 UrlRewrite 模块的定义。

    你要做的是,找到相关模块的定义。在这种情况下,它位于 C:\Windows\system32\inetsrv\config\applicationHost.config

    的 apphost.config

    在该文件中,查找规则部分定义,它的开头类似于

    <section name="rules"
    

    您必须将restartOnExternalChanges="true" 属性添加到该配置文件。

    【讨论】:

    • 顺便说一句,我用 UrlRewrite 模块对其进行了测试,由于该模块的本机实现,这不适用于它。在link 寻找接受的答案
    【解决方案2】:

    IIS7 配置系统使用与 .Net 框架配置系统相同的语法,但是是不同的实现,具有一些行为差异。 restartOnExternalChanges这个东西是.Net框架配置系统的一个特性,IIS7配置系统不支持。 url重写模块使用IIS7配置系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多