ASP.NET Caching - System.Web.Caching.CacheDependency

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:

  1. Timer: un timer che effettua un poll sulle risorse
  2. Thread: un thread che controllerà le nostre risorse
  3. 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

Print

Comments on this entry:

# re: ASP.NET Caching - System.Web.Caching.CacheDependency

Left by www.aolmail.com at 10/09/2018 21:37
Gravatar
it may become deactivated, at which point any emails sent to it may not be delivered and may be returned to sender.
Comments have been closed on this topic.