2010-12-15 14 views
9

Durante Application_End() en Global.aspx, HttpContext.Current es nulo. Todavía quiero poder acceder al caché - está en la memoria, así que quiero ver si puedo hacer referencia a él de alguna manera para guardar los bits en el disco.C# ASP.NET: cómo acceder al caché cuando no hay HttpContext.Current disponible (es nulo)?

Pregunta - ¿Hay alguna manera de hacer referencia a la memoria caché en memoria de alguna manera cuando HttpContext.Current es nulo?

Quizás podría crear una variable estática global que almacenara el puntero a la caché que podría actualizar en las solicitudes HTTP (pseudo: "static <pointer X>" = HttpRequest.Current) y recuperar una referencia a la caché a través de ese puntero en Application_End()?

¿Hay una mejor manera de acceder a Cache en la memoria cuando no hay Http Request made?

Respuesta

4

Dentro del evento Application_End todos los objetos de caché ya están eliminados. Si desea obtener acceso a objeto de caché antes de que se dispondrá, es necesario utilizar somethink como este para añadir objetos a la caché:

importación System.Web.Caching espacio de nombres para su aplicación en la que está utilizando objetos añadiendo a cache.

//Add callback method to delegate 
var onRemove = new CacheItemRemovedCallback(RemovedCallback); 

//Insert object to cache 
HttpContext.Current.Cache.Insert("YourKey", YourValue, null, DateTime.Now.AddHours(12), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, onRemove); 

Y cuando este objeto va a ser eliminado, será llamado método siguiente:

private void RemovedCallback(string key, object value, CacheItemRemovedReason reason) 
{ 
    //Use your logic here 

    //After this method cache object will be disposed 
} 

Por favor, hágamelo saber si este enfoque no es adecuado para usted. Espero que te ayude con tu pregunta.

Saludos cordiales, Dima.

9

Estoy usando el siguiente getter para devolver un objeto System.Web.Caching.Cache que funciona para mí.

get 
{ 
    return (System.Web.HttpContext.Current == null) 
     ? System.Web.HttpRuntime.Cache 
     : System.Web.HttpContext.Current.Cache; 
} 

Lo que básicamente respalda James Gaunt, pero por supuesto, sólo va a ayudar a que el caché en la aplicación final.

Editar: ¡Probablemente recibí esto de uno de los comentarios en el blog Scott Hanselman al que James vinculaba!

Cuestiones relacionadas