Проблема кэширования символических ссылок в IIS 7.5
У меня есть настройка IIS (7.5) для статического сервера некоторых файлов, и некоторые из этих файлов на самом деле являются символическими ссылками (созданными mklink).
даже если я отключил кэширование ядра и пользователя, эти файлы, похоже, каким-то образом кэшируются IIS. И IIS по-прежнему обслуживает старую версию после изменения файлов.
(чтобы убедиться, что это не вызвано ASP.NET, я создал специальный неуправляемый AppPool.)
(Я проверил, что эти файлы не кэшируются броузеры.)
мой веб.конфигурация следующая:
<?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>
есть несколько человек, назвавших данную проблему:
никаких намеков, как решить эту проблему?
3 ответов
эта проблема сводила меня с ума, как месяц назад. Вы должны отключить кэширование IIS в реестре, насколько я знаю, это нигде не документировано для IIS 7, но вместо этого это старый трюк IIS 5, который все еще работает. Вы можете либо превратить нижеприведенное в a .reg файл и импортировать его или вы можете просто перейти к разделу и добавить его вручную. Я рекомендую перезагрузку после изменения этого параметра, я не уверен, что IIS поднимает его после только iisreset.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\InetInfo\Parameters]
"DisableMemoryCache"=dword:1
ранее я смог исправить эту проблему на IIS7 с помощью Banins fix. С тех пор я перешел на Windows 10 С IIS10 и снова столкнулся с той же проблемой. DisableMemoryCache не помог.
затем я отключил кэширование ядра, и на данный момент это, похоже, устраняет проблему (мне жаль голландцев на скриншоте):
решение Банина сработало для меня. Проблема решена после изменения параметра реестра и сброса IIS. Ниже приведена программа C# (Вы можете использовать LINQPad для ее запуска), которая поможет вам воспроизвести проблему:
using System.IO;
using System.Net;
void Main()
{
var virtualPath = "JunctionPoint/sample.js";
var physicalPath = $@"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!!!");
}
}
}