3 pagine in totale: <<Indietro 1 2 [3]
Codice
Il codice non è molto differente da quello usato per l'invalidazione via polling, la differenza sta nel fatto che nel costruttore della classe SqlCacheDependency viene passato come argomento l'oggetto SqlCommand con la query da monitorare.
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
conn.Open();
SqlCommand comm = new SqlCommand("select campo from tabella", conn);
Response.AddCacheDependency(new System.Web.Caching.SqlCacheDependency(comm));
}
Ovviamente è possibile aggiungere questa dipendenza anche ad un oggetto in cache o ad un controllo DataSource.
Post-Cache Substitution
In molti casi ci si trova davanti all'esigenza di dover mettere in cache delle pagine intere, tramite la direttiva @OutputCache, ad esclusione di una parte che contiene l'ora o il nome dell'utente o un banner pubblicitario o altro ancora. Se la pagina venisse memorizzata interamente, tutti gli utenti vedrebbero lo stesso banner, lo stesso nome utente o la stessa ora. Nella versione 1.x l'unica soluzione è disabilitare il caching di pagina, frammentare il codice in user controls e abilitare opportunamente il caching su questi. Per evitare un simile workaround, è stata introdotta una nuova feature: la Post-Cache Substitution. Questa nuova feature permette di mantenere in memoria un'intera pagina, rendendo un'area insensibile al caching e rielaborandola ad ogni singola richiesta.
Questa tecnica viene implementata attraverso una chiamata al metodo WriteSubstitution della classe HttpResponse, che si occupa di scrivere nel buffer di output i dati spediti e di memorizzare il contenuto in modo che nella richiesta successiva della pagina venga rielaborata la parte non soggetta a caching. Questo metodo accetta in input un delegate di tipo HttpResponseSubstitutionCallback; questo impone che: a) il metodo a cui il delegate punta sia statico (static in C#, Shared in VB.NET), b) come unico argomento accetti una variabile di tipo HttpContext, che rappresenta il contesto della richiesta, c) ritorni una stringa. Il valore ritornato contiene il valore che viene poi scritto nell'output della pagina. Il framework offre un controllo che implementa tutto ciò e il suo nome dice già tutto: Substitution.
<%@ Page Language="C#" %>
<%@ OutputCache Duration="60" %>
<script runat="server">
static string GetCurrentTime(HttpContext context)
{
return DateTime.Now.ToString("t");
}
</script>
<html>
<head runat="server"%>%</head>
<body>
<form id="form1" runat="server">
L'ora corrente è />
<br/><br/>
Mentre l'ora del caching è stata <%=DateTime.Now.ToString("t")%>!
<br/><br/>
Niente male EH!!! :)
</form>
</body>
</html>
La sua proprietà principale è MethodName, che deve contenere il nome del metodo che viene invocato tramite il delegate menzionato sopra.
La Substitution può essere, ovviamente, implementata anche in un CustomControl, l'importante è sempre inviare al flusso di output il markup generato utilizzando il metodo Response.WriteSubstitution.
[DefaultProperty("Time")]
[ToolboxData("<{0}:TimeSubstitution runat=server>{0}: TimeSubstitution>")]
public class TimeSubstitution : WebControl
{
private DateTime _time;
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
public DateTime Time
{
get
{
return _time;
}
set
{
_time = value;
}
}
protected override void Render(HtmlTextWriter output)
{
Context.Response.WriteSubstitution(new System.Web.HttpResponseSubstitutionCallback(SubstitutionCallback));
}
private static string SubstitutionCallback(System.Web.HttpContext context)
{
return DateTime.Now.ToLongTimeString();
}
}
C'e un altro controllo, tra quelli di base del framework, che utilizza la substitution: l'AdRotator.
OutputCaching Configuration
Una delle cose più frustranti delle prime versioni di ASP.NET è l'impossibilità di gestire in un unico punto l'OutputCaching. Infatti, se si vuole modificare la strategia di OutputCaching di un'area o dell'intera applicazione, bisogna intervenire su ogni singola pagina. Finalmente anche questa limitazione è stata superata inserendo alcune nuove sezioni nel web.config.
Come già visto per la SqlDependency, nel web.config è stata introdotta la sezione caching. Questa porzione del file di configurazione può contenere a sua volta tre sottosezioni oltre a quella vista in precedenza:
- cache: definisce alcuni parametri generici della cache, di cui il più importante è percentagePhysicalMemoryUsedLimit che specifica la percentuale di memoria utilizzabile. Il parametro disableExpiration specifica se abilitare o meno l'expiring della cache.
<cache percentagePhysicalMemoryUsedLimit="25" />
- outputCache: contiene un elemento diskCache che permette di specificare se abilitare o meno il DiskOutputCaching e il percorso in cui salvare gli eventuali file.
<outputCache>
<diskCache enabled="true" path="C:\SMProjects\TestCaching\Web\DiskCache"/>
</outputCache>
- outputCacheSettings: definisce un elemento outputCacheProfiles che contiene tanti elementi al suo interno quante sono le regole di caching che si vogliono utilizzare nell'applicazione. Per ogni regola che si crea si possono impostare le stesse proprietà che si possono impostare nella direttiva @OutputCache nelle singole pagine.
<outputCacheSettings>
<outputCacheProfiles>
<add name="Profilo" diskCacheable="false" duration="60" enabled="true" location="Server" varyByParam="none" />
</outputCacheProfiles>
</outputCacheSettings>
Conclusioni
Con l'avvento della versione 2.0 del framework, molte sono le novità in arrivo e, di queste, il caching è solamente una delle tante. In ogni caso risulta evidente che tutte le caratteristiche introdotte con la nuova versione rendono il passaggio da Classic ASP e ASP.NET 1.1 alla versione 2.0 un passo praticamente obbligato per chi intende continuare a sviluppare applicazioni web in ambiente Microsoft .NET.
Tutti gli articoli dello speciale su ASP.NET 2.0
- ASP.NET 2.0: Visual Web Developer, architettura e nuove funzionalità di Daniele Bochicchio
- Controlli DataSource in ASP.NET 2.0 di Cristian Civera
- Master Pages, temi e controlli standard in ASP.NET 2.0 di Riccardo Golia
- Membership e Roles API: autenticazione, autorizzazione e gestione dei ruoli con ASP.NET 2.0 di Andrea Zani
- I meccanismi di caching in ASP.NET 2.0 di Stefano Mostarda
3 pagine in totale: <<Indietro 1 2 [3]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.






Difficoltà
Contenuti
Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
