Mega Code Archive

 
Categories / ASP.Net Tutorial / Cache
 

Creating an RssCacheDependency class (C#)

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">     <title>Custom Cache Dependency Example</title> </head> <body>     <form id="Form1" runat="server"> RSS URL:        <asp:TextBox ID="TextBox1" Runat="server"/>        <asp:Button ID="Button1" onclick="Button1_Click" Runat="server"          Text="Get RSS" />         Cached:<asp:Label ID="Label2" Runat="server"></asp:Label><br />         RSS:<br />         <asp:TextBox ID="TextBox2" Runat="server" TextMode="MultiLine"          Width="800px" Height="300px"></asp:TextBox>     </form> </body> </html> <script runat="server">     void Button1_Click(object sender, System.EventArgs e)     {         string RSSUrl = TextBox1.Text;         Label2.Text = "Loaded From Cache";         if (Cache[TextBox1.Text] == null)         {             Label2.Text = "Loaded Fresh";             RssCacheDependency itDepends = new RssCacheDependency(RSSUrl, 600);             Cache.Insert(RSSUrl, itDepends.Document, itDepends);         }         TextBox2.Text = ((System.Xml.XmlDocument)Cache[TextBox1.Text]).OuterXml;     } </script> File: App_Code\RssCacheDependency.cs using System; using System.Web; using System.Threading; using System.Web.Caching; using System.Xml; public class RssCacheDependency : CacheDependency {     static Timer backgroundThread;     int howOften = 900;     XmlDocument RSS;     string RSSUrl;     public RssCacheDependency(string URL, int polling)     {         howOften = polling;         RSSUrl = URL;         RSS = RetrieveRSS(RSSUrl);         if (backgroundThread == null)         {             backgroundThread = new Timer(                    new TimerCallback(CheckDependencyCallback),                    this, (howOften * 1000), (howOften * 1000));         }     }     public XmlDocument RetrieveRSS(string URL)     {         XmlDocument retVal = new XmlDocument();         retVal.Load(URL);         return retVal;     }     public void CheckDependencyCallback(object sender)     {         RssCacheDependency CacheDepends = sender as RssCacheDependency;         XmlDocument NewRSS = RetrieveRSS(RSSUrl);         if (NewRSS.OuterXml != RSS.OuterXml)         {             CacheDepends.NotifyDependencyChanged(CacheDepends, EventArgs.Empty);         }     }     override protected void DependencyDispose()     {         backgroundThread = null;         base.DependencyDispose();     }     public XmlDocument Document     {         get         {             return RSS;         }     } }