Bilmek istediğin her şeye ulaş

Silverlight ile okumuş olduğum XML dosyası güncellendiğinde, yeni verilere ulaşamıyorum. Sanki ilk XML dosyasını çerez gibi tutuyor ve hep aynı veriler var. Her istekte create etmeme rağmen hep ilk veriler geliyor. Bunun sebebi nedir ve nasıl önüne geçebilirim?

Silverlight'ı iyi bilmiyorum. Ama, XML parser'ların genel eğilimi dosyanın bir kez okunması ve bilgininin RAM veya cache'te tutulmasıdır. Buna tembel programlama deniyor. API'yi iyi okursan cache'i yenilemek için bir method sağlamış olabilir. Parser'ın bağlı olduğu dosyayı kapatıp tekrar açabilirsin.
  • Paylaş
Kod paylaşır mısın?

Mesela versiyonlama yapabilirsin. Örneğin
<object width="300" height="300"
 data="data:application/x-silverlight-2," 
 type="application/x-silverlight-2" >
 <param name="source" value="SilverlightApplication1.xap"/>
</object> 

Bu şekilde embed yapmak yerine

<object width="300" height="300"
 data="data:application/x-silverlight-2," 
 type="application/x-silverlight-2" >
 <param name="source" value="SilverlightApplication1.xap?v=1.1"/>
</object> 


a? V=1. X gibi versiyonlama yaparsan cache üzerinde problemin kalmaz. Ama senin data düzeyinde bir problemin var, verileri çekerken de sahte bir unique id gönderebilirsin
  • Paylaş
 #region xmlread
 XElement root;
 void xmlRead()
 {
 WebClient w = new WebClient();
 w.DownloadStringCompleted += new DownloadStringCompletedEventHandler(w_DownloadStringCompleted);
 w.DownloadStringAsync(new Uri("/WebSite/WebDataValuesTransfer.xml", UriKind.RelativeOrAbsolute));
 //"http://localhost:17716/WebSite/WebDataValuesTransfer.xml"
 }
 
 void w_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
 {
 if (e.Error == null)
 {

 root = XElement.Parse(e.Result);
 
 }
 else
 lstbox1.Items.Insert(0,e.Error.ToString());
 }
 public string GetXmlDataValues(string dataValuesParameter)
 {
 string retVal = "";
 XNamespace df = root.Name.Namespace;
 XElement status = root.Element(df + dataValuesParameter);

 retVal = status.Element(df + "value").Value.ToString();
 return retVal;
 }

 #endregion

Yukarıdaki kod bloğu tam olarak bu işi görmekte belki birilerine lazım olur :)
  • Paylaş