RSS 2.0 Atom 1.0 CDF  
JASoft.org - Uso de la clase Cache de ASP.NET 2.0 fuera de aplicaciones Web.
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

Hace un par de días Eduardo Quintas publicó en Geeks, un interesante post titulado "Desacoplando System.Web.Cache de nuestra lógica de negocio". En él describía cómo crear mediante el uso de algunos patrones una arquitectura de caché que permitía desacoplar nuestra aplicación de la tecnología de caché utilizada, de forma que usando el mismo código y sólo cambiando el proveedor podríamos usar diferentes tipos de caché y en distintos ámbitos (web, Windows Forms...). Léetelo porque es muy interesante.

Al hilo de esto añadí un comentario sobre cómo usar la caché de ASP.NEt fuera de aplicaciones Web. Lo cierto es que las veces que lo he usado sólo ha sido con pruebas y no en aplicaciones reales, por lo que no puedo asegurar que no sea cierto lo que dice Eduardo sobre ciertos problemas al llamarla desde múltiples hilos, pero sí puedo asegurar que funciona mientras estemos dentro de un mismo dominio de aplicación.

para usar la caché de ASP.NET en contextos diferentes a la Web basta con instanciarla adecuadamente ya que toda la funcionalidad está incluida por separado en el espacio de nombres System.Web.Caching. Lo difícil es instanciar la clase Cache de este espacio de nombres.

En concreto la forma más fácil de hacerlo es instanciando la clase HttpRuntime y usando su propiedad Cache. Por ejemplo en una aplicación de consola se haría así (hay que agregar una referencia a System.Web.dll):

using System.Web;
using System.Web.Caching;

public class Prueba
{
 public static void Main()
 {
  HttpRuntime httpRT = new HttpRuntime();
  Cache cache = HttpRuntime.Cache;
  cache["prueba"] = "Hola Edu";
  Console.ReadLine();
  Console.WriteLine(cache["prueba"]);
  Console.ReadLine();
 }
}

En una DLL se haría igual.

Esta caché se mantiene todo el rato para un mismo dominio de aplicación, así que nos vale para cualquier aplicación de host que queramos crear (por ejemplo en una capa de negocio remota) o para un EXE normal mientras se esté ejecutando, por lo que tiene una gran utilidad.

Espero que le resulte útil a alguien.

Wednesday, March 28, 2007 10:07:03 PM (Hora de verano romance, UTC+02:00)  #    Comments [2]   ASP.NET  |  Trackback
Friday, March 30, 2007 9:57:00 PM (Hora de verano romance, UTC+02:00)
Sí, claro, de hecho puedes hacer cachés sin problemas en variables estáticas. Lo que ocurre es que con esto tienes la potencia de especificar duraciones, que dependa de archivos o de otras variables, etc.. Es mucho más potente, claro está.

También está el Enterprise Cache Block que aún es mejor (búscalo en la web de Microsoft).

Por otro lado compartir algo entre todos los dominios de aplicación de un proceso es imposible por definición. La única forma de hacerlo sería usando remoting (método nativo de comunicaci´no entre dominios de aplicaicón) o con otro método de comunicaicón externo, como un servicio web o de WCF.

Saludos

JM.
Sunday, May 27, 2007 8:44:00 PM (Hora de verano romance, UTC+02:00)
Very interesting.
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, b, i, strike, strong, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.