2012-09-03 37 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

同样的问题! –

相关问题