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).
Marc su proveedor de caché de salida personalizado no sería de origen abierto en alguna parte, ¿verdad? –
@ 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. –
¿Alguna vez encontró el proveedor de caché de salida personalizado? Es curioso, ya que parece que faltan los horneados. –