Una delle funzionalità meno note di IIS 7 è la possibilità di usare un tipo particolare di Cache, detta Output Cache, attenzione a non confonderla con la Kernel Mode Cache.

La Output Cache funziona in user-mode (IIS worker process) e fornisce funzionalità simili alla cache di ASP.NET, ma con una importante differenza: essendo integrata in IIS 7, fornisce queste funzionalità di cache non solo alle pagine ASP.NET, ma anche a contenuti dinamici di natura diversa, come le pagine ASP e PHP.

Come funziona? Si basa sulla possibilità di riconoscere i deversi contenuti di una pagina usando la query string o gli header Http. Mi spiego meglio. Inanzitutto va ricordato che in IIS 7 possiamo avere dei file web.config per la configurazione del comportamento di IIS anche in una directory che contiene solo contenuti statici o non-ASP.NET. Immaginiamo di avere una applicazione web del tipo http://server/GetBike.asp?type=tipo1 . Il parametro type nella query string permette di distringuere quale tipo bicicletta visualizzare. Nel nostro web.config possiamo scrivere qualcosa del genere:

<system.webserver>
<caching>
 <profiles>
<add varybyquerystring="*"location="Any" duration="00:00:01" policy="CacheForTimePeriod" extension=".asp">
 </profiles>
</caching>
</system.webserver>

Questo permette di effettuare il caching della pagina asp, si noti il parametro extension, in base al variare della query string, parametro varbyquerystring. Il parametro CacheForTimePeriod definisce una delle modalità di invalidazione della cache, in questo caso per time-out.

Prima ho parlato della Kernel Mode Cache (già presente in IIS 6); la prima differenza rispetto alla precedente è che questa lavora in modalità Kernel :-). Ci sono due differenze di base rispetto a questi due tipi di cache:

  • la Kernel Mode Cache non supporta il parametro varyByQueryString, che abbiamo usato in precedenza nell'esempio, ma solo il varyByHeaders.
  • la Kernel Cache ha delle limitazioni rispetto ai tipi di richiesta che può mettere in cache. Date un occhio a questo articolo della Knoledge Base per dettagli.

Per approfondimenti ulteriori sulle modalità di uso dell' Output Cache vi consiglio di partire da qui (in inglese).

-Pietro