2011-07-01 10 views
11

estoy flumoxed ... re this y this preguntas "meta" ...OutputCache servir datos a largo rancios

Una petición http muy básico:

GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1 
Host: stackoverflow.com 
Accept-Encoding: gzip,deflate 

el cual realiza un recorrido decorado con :

[OutputCache(Duration = 300, VaryByParam = "tagnames;sort", 
    VaryByContentEncoding = "gzip;deflate", VaryByCustom = "site")] 

es repetidamente e incorrectamente Servin g o bien un 304 (sin modificar) si se incluye si-Modified-Since, o los datos antiguos para un 200, es decir

HTTP/1.1 200 OK 
Cache-Control: public, max-age=0 
Content-Type: application/atom+xml; charset=utf-8 
Content-Encoding: gzip 
Expires: Fri, 01 Jul 2011 09:17:08 GMT 
Last-Modified: Fri, 01 Jul 2011 09:12:08 GMT 
Vary: * 
Date: Fri, 01 Jul 2011 09:42:46 GMT 
Content-Length: 14714 
(payload, when decoded = some long-stale data) 

Como se puede ver, está sirviendo esta casi media hora pasado la ranura de 5 minutos; parece que las partes internas de OutputCache simplemente no notaron el tiempo; p expirará eventualmente (de hecho, acaba de hacerlo - mi solicitud Fri, 01 Jul 2011 09:56:20 GMT finalmente obtuvo datos recientes), pero no en ninguna parte puntualmente.

ACTUALIZACIÓN:

I creían que estaba trabajando si tomamos distancia de la cabecera accept-encoding, pero no; esto no funciona demasiado - simplemente no funciona en un ciclo diferente (que es lo que deberíamos esperar ya que las claves son diferentes, por cortesía de VaryByContentEncoding):

GET http://stackoverflow.com/feeds/tag?tagnames=c%23&sort=newest HTTP/1.1 
Host: stackoverflow.com 

da:

HTTP/1.1 200 OK 
Cache-Control: public, max-age=0 
Content-Type: application/atom+xml; charset=utf-8 
Expires: Fri, 01 Jul 2011 10:09:58 GMT 
Last-Modified: Fri, 01 Jul 2011 10:04:58 GMT 
Vary: * 
Date: Fri, 01 Jul 2011 10:17:20 GMT 
Content-Length: 66815 
(payload = some stale data) 

Una vez más,' Notaré que se está sirviendo después deExpires.

Entonces, ¿qué podría estar mal aquí?

Adicional; mientras usamos una opción personalizada, nuestro GetVaryByCustomString() llama correctamente al base.GetVaryByCustomString(ctx, custom) para las opciones que no reconoce, de acuerdo con MSDN (de hecho, esto funciona bien para el segundo ejemplo anterior).

+0

Marc su proveedor de caché de salida personalizado no sería de origen abierto en alguna parte, ¿verdad? –

+0

@ runxc1 Tendría que verificar, pero nuestra herramienta predeterminada "ir a" allí es roja a través de booksleeve (ambas son de código abierto) usando algunos wrappers personalizados (que no son). Sin embargo, suena mal pensar en redis aquí, tendré que echarle un vistazo al código. –

+0

¿Alguna vez encontró el proveedor de caché de salida personalizado? Es curioso, ya que parece que faltan los horneados. –

Respuesta

10

¿Hay alguna posibilidad de que esté usando un proveedor de caché de salida personalizado? Hipotéticamente, si hubiera un proveedor personalizado que utilizara un vencimiento deslizante en lugar de uno absoluto, vería síntomas como este.

+5

Sí; resulta que *** chupamos *** –

+0

Jeff ** ** lo despedirá por no poder chupar un poco menos hoy;)) –

+1

Ah, bueno, al menos no estropeamos la unidad de tiempo; que * sería * embarazoso –

Cuestiones relacionadas