2011-07-14 82 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!!!"); 
    } 
    } 
}