2016-02-17 6 views
2

У меня есть приложение ASP.NET, который устанавливает атрибут на rewriteRulesconfigSource элемента в web.config, чтобы указать на отдельный конфигурационный файл:Как перезагрузить кеш-файл конфигурации asp.net?

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

Мой веб-приложение делает изменения в файл RewriteRules.config программно, но мой веб-приложение не получает изменения конфигурации после того, как файл отредактирован и сохранен.

Я попытался позвонить HttpRuntime.UnloadAppDomain() после редактирования файла. Это успешно перезапустило мой домен приложения, но изменения в RewriteRules.config все еще не получены. Я попытался добавить RestartOnExternalChanges="true" в элемент rewrite, но это, очевидно, не поддерживается в модуле перезаписи IIS. Я также пробовал ConfigurationManager.RefreshSection("rewrite/rules"), но это, похоже, не имеет никакого эффекта. Единственный способ заставить изменения вступить в силу - это отредактировать и сохранить основной файл web.config, но я стараюсь избегать этого программно по соображениям безопасности.

Я смущен, почему HttpRuntime.UnloadAppDomain() не вызывает перезаписи внешних конфигурационных файлов. Это ожидаемое поведение? Каким-то образом кеш-файл конфигурации существует за пределами домена приложения? Есть ли какой-либо практический способ добиться того, что я ищу?

ответ

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.

Что вам нужно сделать, найти определение связанного модуля. В этом случае, он находится на apphost.config в C: \ Windows \ system32 \ Inetsrv \ Config \ applicationHost.config

В этом файле, обратите внимание на определение правила раздела, она начинается как

<section name="rules" 

Вы должны добавить атрибут restartOnExternalChanges="true" к этому файлу конфигурации.

+0

Кстати, я протестировал его с модулем UrlRewrite, и это не работает для него из-за собственной реализации этого модуля. Найдите принятый ответ в [link] (https://forums.iis.net/t/1155629.aspx) –