我已经设置了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>
有几个人提到这个问题:
任何提示如何解决这个问题?
答案 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没有帮助。
然后我禁用了内核缓存,现在,这似乎解决了这个问题(我很抱歉截图中的荷兰语):
答案 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!!!");
}
}
}