如何防止Silverlight缓存外部XML文件

如何防止Silverlight缓存外部XML文件,silverlight,caching,Silverlight,Caching,我有一个Silverlight5应用程序(XAP),它严重依赖于对服务器的XML请求 应用程序将请求一个由服务器不断更新的文件http:../Menu.xml 当我在浏览器中查看XML文件时,一切正常,但是Silverlight的行为就好像它使用的是该文件的旧缓存版本一样 我通过在XML URL的末尾添加“?=random”向XML uri添加了一个随机字符串参数,但仍然遇到同样的问题 file_uri_path = "http://adomain.com/.../Menu.xml";

我有一个Silverlight5应用程序(XAP),它严重依赖于对服务器的XML请求

应用程序将请求一个由服务器不断更新的文件http:../Menu.xml

当我在浏览器中查看XML文件时,一切正常,但是Silverlight的行为就好像它使用的是该文件的旧缓存版本一样

我通过在XML URL的末尾添加“?=random”向XML uri添加了一个随机字符串参数,但仍然遇到同样的问题

   file_uri_path = "http://adomain.com/.../Menu.xml";

   XmlClient.DownloadStringAsync(GetCCFKPath(file_uri_path));



   public static string GetCCFKPath(string path)
   {
       Random r = new Random(256780);

       int random = r.Next(20000);

       return path + "?ccfk=" + random ;
   }

这可能只是IE的一个问题。。。你对Chrome也有同样的问题吗

请参见此,以获得可能的解决方案。它使用以下脚本获取xml

var request = new XMLHttpRequest();
request.open("GET", url, false);
request.send(null);
if(!request.getResponseHeader("Date")) 
{
  var cached = request;
  request = new XMLHttpRequest();
  var ifModifiedSince = cached.getResponseHeader("Last-Modified");
  ifModifiedSince = (ifModifiedSince) ?
    ifModifiedSince : new Date(0); // January 1, 1970
  request.open("GET", url, false);
  request.setRequestHeader("If-Modified-Since", ifModifiedSince);
  request.send("");
  if(request.status == 304) 
  {
    request = cached;
  }
} 

我认为这是一种可信的尝试方法。您可以使用
WebClient.GetWebRequest
添加“If Modified-Since”标题。