2011-07-14 84 views
16

我已经设置IIS(7.5)静态地服务某些文件,其中一些文件实际上是符号链接(由mklink创建)。在IIS 7.5上的符号链接缓存问题

即使我禁用了内核和用户缓存,这些文件似乎都以某种方式被IIS缓存。在文件被修改后,IIS仍旧在服务旧版本。

(要确保它不是由ASP.NET造成的,我创建了一个专门的非托管的应用程序池。)

(我已签,这些文件不会被浏览器缓存)。

我的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> 

有几个人提这个问题:

任何提示如何解决这个问题呢?

+2

回收应用程序池应更新这些文件 - 但本身不是解决方案。 –

+0

(是的,回收应用程序池会丢弃缓存。) –

回答

20

这个问题迫使我像一个月前回来坚果。您必须在注册表中禁用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 
+0

可以为每个网站设置它吗? –

+0

不幸的是,没有。注册表值全局关闭缓存。 – Banin

+0

+1好的,谢谢你的提示。但我不能使用它 - 因为我只需要一个网站:( –

2

我以前能够用Banins fix修复IIS7上的这个问题。因为我使用IIS10迁移到Windows 10,并再次遭遇同样的问题。 DisableMemoryCache没有帮助。

我然后禁用内核缓存,现在来看,这似乎是解决这个问题(我是荷兰人在截图不好意思):

enter image description here

+0

请注意,OP已禁用内核缓存('enableKernelCache =“false”')。不幸的是,这个解决方案在IIS 10上不适用于我。同样的结果。 – NSAddict

0

Banin的解决方案为我工作。更改注册表参数并重置IIS后,问题得到解决。下面是C#程序(您可以使用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!!!"); 
    } 
    } 
}