如何重新加载asp.net配置文件缓存?

时间:2016-02-17 17:12:22

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

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

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

我的网络应用程序以编程方式编辑RewriteRules.config文件,但在编辑和保存文件后,我的网络应用程序未选择配置更改。

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

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

2 个答案:

答案 0 :(得分:0)

Dude,您的案例的问题是,相关的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"属性添加到该配置文件中。

答案 1 :(得分:0)

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