WP7 HttpWebRequest sin almacenamiento en caché

Parece que el almacenamiento en caché HttpWebRequest en WP7 está habilitado de forma predeterminada, ¿cómo lo desactivo? Agregar un param url + “? Param =” + RND.Next (10000) al azar funciona, pero es bastante complicado y no estoy seguro de si funcionará con todos los servidores.

Para referencia futura, esto funcionó para mí (no pude usar el parámetro de consulta adicional debido a los requisitos del proyecto):

HttpWebRequest request = HttpWebRequest.CreateHttp(url); if (request.Headers == null) { request.Headers = new WebHeaderCollection(); } request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString(); 

En el caso de HttpClient (Portable para Windows Phone) “Cache-Control”: “no-cache” en el lado del servidor funciona solo algunas veces. Y no puedo agregar el valor aleatorio de la cadena de consulta a la llamada api RESTful también.

La solución de @frno funciona bien y se parece a HttpClient:

 client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow; 

Gracias.

¿Cómo sabes que es el teléfono, no el servidor (o un proxy en algún lugar entre) que está almacenando en caché?
¿Has verificado esto con Fiddler2 (o equivalente)?

¿Has intentado configurar los encabezados para desactivar el almacenamiento en caché?
Algo como:

 myRequest = (HttpWebRequest)WebRequest.Create(myUri); myRequest.Headers["Cache-Control"] = "no-cache"; myRequest.Headers["Pragma"] = "no-cache"; 

Hemos visto el mismo comportamiento con Silverlight alojado en Chrome.

"?nocache=" + DateTime.Now.Ticks.ToString() un "?nocache=" + DateTime.Now.Ticks.ToString() a nuestras URL de solicitud si queremos evitar el almacenamiento en caché.

Encontré 3 maneras

  1. Agregue una cadena de consulta aleatoria al final de su URI (piense en Guid.NewGuid ()) esto evitará el almacenamiento en caché en el cliente, ya que la cadena de consulta será diferente cada vez

string uri = ” http://host.com/path?cache= ” + Guid.NewGuid (). ToString ();

  1. No especifique ningún caché en el encabezado OutgoingResponse dentro de su operación de servicio WCF:
 var __request = (HttpWebRequest)WebRequest.Create(url.ToString()); if (__request.Headers == null) __request.Headers = new WebHeaderCollection(); __request.Headers.Add("Cache-Control", "no-cache"); 
  1. Marque su operación de servicio con el atributo AspNetCacheProfile:
 [AspNetCacheProfile("GetContent")] public ResultABC GetContent(string abc) { __request = (HttpWebRequest)WebRequest.Create(abc); return __request; } 

Y actualiza tu web.config

          ...  

Agregar un número aleatorio no está mal y funcionará. He usado el tiempo (en la llamada ajax). Fue colocado en la url como una carpeta.

Sí, es posible … 🙂 Paso una semana de Experimento y la respuesta es realmente simple:

  HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl); _webRequest.AllowReadStreamBuffering = false _webRequest.BeginGetResponse(_onDownload, userState);