Hola a tod@s,
voy a escribir sobre un problema que he tenido con el cacheo de las peticiones que hace el objeto webclient y como lo «he solucionado» mientras desarrollaba una aplicación para Windows Phone.
Bueno básicamente tengo que acceder a una dirección web y leer la información que tiene esa web para luego tratarla. Esa dirección web es consultada cada poco tiempo porque la información cambia cada 2 o 3 minutos, así que uso el objeto webclient de la siguiente manera:
El código es de lo mas simple, pues bien la única forma de que me actualizase la información era salir de la aplicacion y volverla a abrir para que la caché del webclient se vaciara.
Como al ejecutar este código en Windows Phone me cachea la web que consulto y cada vez que lo hago obtengo la misma información, después de mirar todos los parámetros y propiedades del objeto webclient, he llegado a la conclusión de que la única manera que tengo de obtener la información real de la web en cualquier momento es generar una nueva url pero que me siga llevando a la misma pagina.
¿Como lo he hecho? pues probando a añadir un parámetro que no signifique nada a la url original de la siguiente manera:
Esta es la única forma con la que he hecho funcionar la petición y obtener el contenido correcto sin que estuviera en la caché del webclient.
No me parece la mejor solución pero es por aportar una idea a quien como yo se esté volviendo loco con esto, es un parche para seguir funcionando. Si a alguien le ha pasado lo mismo y lo ha solucionado de otra forma que me deje un comentario y añadiré su solución al post.
Un saludo 😉
20 mayo, 2013 a las 9:30 pm
Este problema se ha discutido muchas veces con la gente de MS porque es de lo menos intuitivo que podrian haber hecho (y mira que esta desde WP7…). Ahora mismo no recuerdo si surtia el mismo efecto, pero has probado a especificar el valor «Cache-Control: no-cache, must-revalidate» para el header «Cache-Control» antes de hacer la peticion?
20 mayo, 2013 a las 10:24 pm
Si no recuerdo mal, el «problema» que tienes con la cache tiene que ver con las cabeceras Max-Age y/o Expires que envía el servidor. Éstas son las que van a marcar si el contenido que recibiste aún es válido o si hay que traerlo de nuevo. Variar la URL puede que no funcione en todos los casos, pero si tienes control sobre el lado servidor es allí donde deberías mirar de hacer el cambio.