Как запретить IIS 7.5 кэшировать содержимое символьных ссылок?
Я настроил IIS 7.5 для статического обслуживания некоторых файлов, и некоторые из этих файлов на самом деле являются символическими ссылками (созданными mklink
).
Даже если я отключил кеширование как ядра, так и пользователей, эти файлы как-то кэшируются IIS. И IIS все еще обслуживает старые версии после изменения файлов.
Чтобы убедиться, что это не вызвано ASP.NET, я создал специальный неуправляемый AppPool. Я также проверил, что эти файлы не кэшируются браузерами.
Мой web.config выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="true" />
<caching enabled="false" enableKernelCache="false" />
<urlCompression doStaticCompression="false" doDynamicCompression="false" />
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
</configuration>
Есть несколько человек, упоминающих эту проблему:
Любые намеки, как решить эту проблему?
Ответы
Ответ 1
Эта проблема привела меня в орехи как месяц назад. Вы должны отключить кеширование IIS в реестре, насколько я знаю, это не документировано нигде для IIS 7, а вместо этого является старым трюком IIS 5, который все еще работает. Вы можете либо повернуть ниже в .reg файл, либо импортировать его, либо просто перейти в раздел и добавить его вручную. Я рекомендую перезагружать после изменения этого параметра, я не уверен, что IIS выбирает его только после iisreset.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters]
"DisableMemoryCache"=dword:1
Ответ 2
Ранее я мог решить эту проблему на IIS7 с помощью исправления Banin. С тех пор я перешел на Windows 10 с IIS 10 и снова столкнулся с той же проблемой. DisableMemoryCache
не помогло.
Затем я отключил кеширование ядра, и на данный момент это, похоже, решает проблему (извините за нидерландский на скриншоте):
![IIS dialog box screenshot]()
Ответ 3
Банин решение сработало для меня. Проблема была решена после изменения параметра реестра и сброса IIS. Программа С# ниже (вы можете использовать LINQPad для ее запуска) поможет вам воспроизвести проблему:
using System.IO;
using System.Net;
void Main()
{
var virtualPath = "JunctionPoint/sample.js";
var physicalPath = [email protected]"C:\IISROOT\JunctionPoint\{virtualPath}";
for (int i = 0; i < 100; i++) {
File.WriteAllText(physicalPath, i.ToString());
Console.Write(i + "=");
var client = new WebClient();
string html = client.DownloadString($"http://localhost/{virtualPath}");
Console.WriteLine(html);
if (i.ToString() != html) {
Console.WriteLine("Issue reproduced!!!");
}
}
}