IIS 7.5上符号链接的缓存问题

时间:2011-07-14 18:55:39

标签: windows iis caching iis-7.5 symlink

我已经设置了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 个答案:

答案 0 :(得分:22)

这个问题让我坚持了一个月前的一段时间。您必须在注册表中禁用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

答案 1 :(得分:3)

我以前能够通过Banins修复在IIS7上修复此问题。因为,我用IIS10移动到Windows 10,并再次遇到同样的问题。 DisableMemoryCache没有帮助。

然后我禁用了内核缓存,现在,这似乎解决了这个问题(我很抱歉截图中的荷兰语):

enter image description here

答案 2 :(得分:0)

Banin的解决方案对我有用。更改注册表参数并重置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!!!");
    }
  }
}