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

3

我有一个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"添加到重写元素中,但显然IIS重写模块不支持此选项。我还尝试过使用ConfigurationManager.RefreshSection("rewrite/rules"),但似乎没有任何效果。唯一能使更改生效的方法是编辑和保存主Web.config文件,但出于安全原因,我正在尝试避免以编程方式执行此操作。

我困惑的是为什么HttpRuntime.UnloadAppDomain()不会导致外部配置文件被重新读取。这是否是预期行为?配置文件缓存是否存在于应用程序域之外?有没有实际的方法来实现我所需要的功能?

2个回答

0

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


0
兄弟,你的问题在于,相关的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模块进行了测试,但由于该模块的本地实现,它无法正常工作。请查看[链接](https://forums.iis.net/t/1155629.aspx)上的被接受的答案。 - Oğuzhan Kahyaoğlu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接