2012-09-03 72 views
4

讀取過時的數據,我讀了XML文件中的數據是這樣的:我的應用程序從XML文件

StringBuilder str = new StringBuilder(); 
str.Append("<News>"); 

XDocument xmlDoc = XDocument.Load(path); 
var q = xmlDoc.Descendants("news") 
.Where(x => x.Descendants("language_id") != null && x.Descendants("language_id").First().Value == "2") 
.Select(x => x); 

foreach (var st in q) 
{ 
    str.Append(st.ToString(SaveOptions.DisableFormatting) + " "); 
} 

str.Append("</News>"); 
return str.ToString(); 

但最近,我注意到,當XML文件更新。它仍然讀取舊數據!我不知道它是否從一個兌現副本讀取。

當我重置iis它更新數據。

如何解決這個問題?

+1

什麼是可變的路徑的類型? –

+2

我經常發現如果我在我的Visual Studio解決方案上做了一個簡單的「構建」,IIS沒有更新。在大多數情況下,我確實需要一個「重建」來讓IIS識別我的更改。 –

+0

'https:// www ...../..../a.xml' –

回答

3

快速破解。

假設path是包含一個URL字符串,改變

XDocument xmlDoc = XDocument.Load(path); 

XDocument xmlDoc = XDocument.Load(path + "?" + Guid.NewGuid().ToString();); 

這將打敗這回事任何中間緩存,並在URL當不可使用?的不要打擾你要求提供數據的服務器。

Guid.NewGuid()僅僅是一個快速的方式來獲得一個隨機字符串,你可以很容易地使用Random類或DateTime.Now.Ticks以類似的方式,如果你喜歡。)

5

可能需要設置DefaultCachePolicy。

WebRequest.DefaultCachePolicy = new 
RequestCachePolicy(RequestCacheLevel.Revalidate); 
XmlDocument xmlDocument = new XmlDocument(); 
xmlDocument.Load(myUri); 

從這裏:http://www.pcreview.co.uk/forums/stop-xmldocument-load-using-cached-data-t3489418.html

+0

是這個安全代碼嗎? –

+0

**重新驗證**'如果時間戳與服務器上資源的時間戳相同,則使用資源的緩存副本滿足請求;否則,資源從服務器下載,呈現給調用者,並存儲在緩存中。 'http://msdn.microsoft.com/en-us/library/system.net.cache.requestcachelevel%28v=vs.80%29.aspx – athoik

+0

同樣的問題! –

相關問題