Проблема с кешированием символических ссылок в IIS 7.5 - PullRequest
16 голосов
/ 14 июля 2011

Я настроил 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>

Есть несколько человек, упоминающих эту проблему:

Есть какие-нибудь советы, как решить эту проблему?

Ответы [ 3 ]

22 голосов
/ 05 января 2012

Эта проблема сводила меня с ума уже месяц назад. Вы должны отключить кэширование 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
3 голосов
/ 24 марта 2016

Ранее я мог решить эту проблему на IIS7 с исправлением Banins. С тех пор я перешел на Windows 10 с IIS10 и снова столкнулся с той же проблемой. DisableMemoryCache не помогло.

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

enter image description here

0 голосов
/ 03 февраля 2017

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