Estoy usando HttpContext.Current.Cache para almacenar en caché consultas de datos costosas con un CacheItemUpdateCallback.

La idea es que el usuario tenga que cargar los datos una vez y luego el updatecallback mantiene el objeto actualizado cada 30 minutos.

Así es como inserto / sobrescribo el caché:

HttpContext.Current.Cache.Insert(cacheID, cachedObject, null,
                                  expiryTimeStamp,
                                  Cache.NoSlidingExpiration,
                                  updateCallBack);   

Por razones de prueba, establecí la fecha de vencimiento de esta manera (actualización cada 20 segundos):

var expiryTimeStamp = DateTime.Now.Add(new TimeSpan(0, 0, 20));

Todo esto funciona bien. Eso significa que está actualizando el costoso objeto cada 20 segundos, pero solo durante unos 25 minutos. ¡Entonces el disparador 'updateCallBack' ya no se llama!

Supongo que el problema es que IIS elimina el caché, por lo que la devolución de llamada 'CacheItemUpdateCallBack' ya no se activa ... Pero eso es solo una suposición.

Eso me lleva a mi pregunta:

¿Hay alguna configuración que deba establecer en app.config o en IIS? ¿O qué estoy haciendo mal?

EDITAR: Además, no entiendo por qué Insertar sobrecarga con CacheItemUpdateCallback no tiene un parámetro CacheItemPriority. Sin embargo, la sobrecarga con CacheItemRemovedCallback tiene un parámetro de prioridad. Tal vez, si pudiera establecer CacheItemPriority en 'Alto', ya resolvería mi problema.

EDITAR: Encontré el problema: hay una propiedad de tiempo de espera inactivo para cada grupo de aplicaciones que se estableció en 20 minutos.

6
Fabian Bigler 26 ene. 2016 a las 15:08

2 respuestas

La mejor respuesta

El tiempo de espera inactivo del grupo de aplicaciones fue establecido en 20 minutos (por defecto). Y debido a que era una instancia de prueba, no había ningún usuario que mantuviera vivo el sitio web.

2
Fabian Bigler 1 feb. 2016 a las 22:35

Si su suposición es correcta acerca de la caducidad de la caché de IIS, esto podría ser la configuración que le gustaría modificar.

Pero supongo que si esto sucede después de 25 minutos exactos cada vez, entonces tiene una configuración oculta establecida en algún lugar porque si no especifica la caducidad de la caché, los elementos se almacenarán en caché mientras el proceso se esté ejecutando o si hay una asignación de memoria emergencia.

1
Rachit Pandey 31 ene. 2016 a las 10:23