2010-03-13 16 views
17

Normalmente tengo una clase estática que lee y escribe a HttpContext.Current.Cache¿Cómo acceder al caché ASP.NET desde un subproceso separado?

Sin embargo, desde la adición de rosca a mi proyecto, todos los hilos consiguen excepciones referencia nula cuando se trata de recuperar este objeto.

¿Hay alguna otra manera de que pueda acceder a él, soluciones u otro caché que pueda usar?

+2

No es seguro para subprocesos. Consulte la palabra clave de bloqueo en su libro de programación favorito de C#. –

+0

¿Qué quiere decir exactamente con "desde que agregué el subprocesamiento"? –

+0

@nobugz: 'System.Web.Caching.Cache' ** es ** seguro para subprocesos. No hay 'bloqueo' necesario aquí. – Aaronaught

Respuesta

2

Si su proyecto es un proyecto ASP.NET, a continuación, se multiproceso, incluso antes "agregó enhebrar".

Compruebe si HttpContext.Current es no nulo antes de hacer referencia HttpContext.Current.Cache.

También, por favor publicar la excepción completa que está recibiendo, y nos muestran el código que hace referencia a la memoria caché.

36

El objeto System.Web.Cache sí es seguro para subprocesos.

El problema es cómo obtener una referencia de manera que funcione en toda la aplicación. HttpContext.Current devuelve nulo a menos que se invoque en un subproceso que maneje una solicitud ASP.NET. Una forma alternativa de obtener el Cache es a través de la propiedad estática System.Web.HttpRuntime.Cache. Esto evitará los problemas con el HttpContext.

+3

HttpRuntime.Cache es la respuesta correcta. – Chris

+0

Oh genial, no sé cómo nunca me encontré con HttpRuntime ... +1, borrando mi respuesta. :) – Tanzelax

+1

+1: Esta es la respuesta correcta. Aquí hay algunos detalles: http://weblogs.asp.net/pjohnson/archive/2006/02/06/437559.aspx –

Cuestiones relacionadas