Проблема кэширования символических ссылок в 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 не помог.

затем я отключил кэширование ядра, и на данный момент это, похоже, устраняет проблему (мне жаль голландцев на скриншоте):

enter image description here


решение Банина сработало для меня. Проблема решена после изменения параметра реестра и сброса 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!!!");
    }
  }
}