<%@ 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;
}
}
}