ASP.NET ci da la possibilità di creare le nostre CacheDependecy, facendo derivare la nostra classe dalla CacheDependecy.
Grazie a questa classe abbiamo possiblità di creare una dipendenza anche per un web service da noi creato.
Il processo è alquanto semplice, bisogna creare una classe che deriva dalla CacheDependecy e far partire un processo asincrono che controllerà se le dipendenze sono cambiate. Se queste cambiano, chiameremo il metodo CacheDependency.NotifyDependencyChange() in automatico la classe CacheDependecy aggiornerà le proprietà HasChanged e UtcLastModified.
Le tecniche più usate per implementare il controllo delle risorse sono 3:
- Timer: un timer che effettua un poll sulle risorse
- Thread: un thread che controllerà le nostre risorse
- Event: quando l'evento viene scaturito, si controllano le risorse
Ecco un semplice esempio usando un Timer:
public class TimerTestCacheDependency : System.Web.Caching.CacheDependency
{
private System.Threading.Timer timer;
private const int pollTime = 5000;
public TimerTestCacheDependency()
{
timer = new System.Threading.Timer(new System.Threading.TimerCallback(CheckDependencyCallback), this, 0, pollTime);
}
private int count = 0;
private void CheckDependencyCallback(object sender)
{
count++;
if (count > 4)
{
base.NotifyDependencyChanged(this, EventArgs.Empty);
timer.Dispose();
}
}
protected override void DependencyDispose()
{
if (timer != null) timer.Dispose();
}
}
L'esempio è semplicissimo.
Il timer controllerà il valore di count quando questo è maggiore a 4 verrà notificato che la risorsa è cambiata, tramite la base.NotifyDependencyChanged.
E' importante fare l'override del metodo DependencyDispose per togliere quello che più non serve una volta che l'oggetto in cache è stato invalidato.
L'utilizzo è lo stesso di tutti gli altri Dependency:
TimerTestCacheDependency dependency = new TimerTestCacheDependency();
Cache.Insert("key", item, dependency);
Customizzare la Dependency, può tornare molto utile con i nostri servizi WCF o servizi quali Active Directory, Microsoft Messaging Queuing (MSMQ) e tanti altri servizi.
posted @ lunedì 5 gennaio 2009 14:47