Parece que el almacenamiento en caché HttpWebRequest en WP7 está habilitado de forma predeterminada, ¿cómo lo desactivo? Agregando un random param url + "? Param =" + RND.Next (10000) funciona, pero es bastante complicado y no estoy seguro si funcionará con todos los servidores.WP7 HttpWebRequest sin almacenamiento en caché
Respuesta
¿Cómo sabes que es el teléfono, no el servidor (o un proxy en algún lugar entre) que es el almacenamiento en caché?
¿Ha comprobado esto con Fiddler2 (o equivalente)?
¿Ha intentado configurar los encabezados para desactivar el almacenamiento en caché?
Algo así como:
myRequest = (HttpWebRequest)WebRequest.Create(myUri);
myRequest.Headers["Cache-Control"] = "no-cache";
myRequest.Headers["Pragma"] = "no-cache";
No es el servidor, porque la misma URL se actualiza corectly en BlackBerry, iPhone y Android – Janci
Cambiar los encabezados no funciona, desafortunadamente. – dethSwatch
Me encontré con este problema con ReSTful end-point que estaba desarrollando para una aplicación WP7. Cambiar el servidor para garantizar que devuelve una respuesta con el encabezado "Cache-Control" establecido en "no-cache" resolvió este problema. – dwynne
Adición de números aleatorios no está mal y que va a funcionar. He usado el tiempo (en la llamada ajax). Fue colocado en la url como una carpeta.
sí funciona por ahora, pero no estoy satisfecho con esto, y estoy buscando una mejor solución – Janci
con un número aleatorio que podría obtener el mismo número pero con el tiempo (como ms desde la medianoche - 1 a 86 400 000) casi imposible. incluso puedes combinar estos dos. ¿Has probado con POST? –
Sí es posible ... :) Me paso de una semana de experimento y la respuesta es muy simple:
HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl);
_webRequest.AllowReadStreamBuffering = false
_webRequest.BeginGetResponse(_onDownload,
userState);
No resuelve el problema de caché .. –
No resuelve el problema + arroja una excepción interna "no compatible". –
Para referencia futura, esto funcionó para mí (que no podía usar 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();
Funciona. No tengo idea por qué. –
@Agent_L la solicitud se ve diferente para el cliente HTTP WP7 – SandRock
que hemos visto el mismo comportamiento con Silverlight alojado en Chrome.
Añadimos un "?nocache=" + DateTime.Now.Ticks.ToString()
a nuestras URL de solicitud si queremos evitar el almacenamiento en caché.
En caso de HttpClient (portátil 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.
Solución de @frno funciona bien y parece que para HttpClient:
client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow;
Gracias.
Este fue el único método que me funciona también. Los otros encabezados de caché parecen no tener ningún efecto. –
Muy buena solución, también para Windows 8.1 Store Universal apps. – NBoymanns
Esto nos funcionaba, ahora lanza 304 de vez en cuando. –
me encontré con 3 formas
- Añadir una cadena de consulta aleatorio al final de su URI (piensa Guid.NewGuid()) esto va a evitar el almacenamiento en caché en el cliente como la cadena de consulta será diferente cada vez
cadena uri = "http://host.com/path?cache=" + Guid.NewGuid().Encadenar();
- especificar que no hay memoria caché en la cabecera OutgoingResponse dentro de su operación de servicio de WCF:
var __request = (HttpWebRequest)WebRequest.Create(url.ToString()); if (__request.Headers == null) __request.Headers = new WebHeaderCollection(); __request.Headers.Add("Cache-Control", "no-cache");
- 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 actualizar su web.config
<system.web> <caching> <outputCache enableOutputCache="true" /> <outputCacheSettings> <outputCacheProfiles > <add name="GetContent" duration="0" noStore="true" location="Client" varyByParam="" enabled="true"/> </outputCacheProfiles> </outputCacheSettings> </caching> ... </system.web>
- 1. HttpWebRequest Timeout en WP7
- 2. HttpWebRequest con almacenamiento en caché habilitado arroja excepciones
- 3. Almacenamiento en caché sin conexión en HTML5
- 4. El entorno de desarrollo Rails 3 mantiene el almacenamiento en caché, incluso sin almacenamiento en caché?
- 5. Almacenamiento en caché distribuido
- 6. Almacenamiento en caché IEnumerable
- 7. Cómo borrar el caché de HttpWebRequest
- 8. Almacenamiento en caché Viewstate?
- 9. Cabecera HttpWebRequest y Set-Cookie en respuesta no analizada (WP7)
- 10. asp.net mvc - almacenamiento en caché
- 11. Almacenamiento en caché en JDBC
- 12. Almacenamiento en caché en urllib2?
- 13. WP7 (Windows Phone 7) Los datos posteriores HttpWebRequest perder
- 14. Almacenamiento en caché gss css
- 15. jQuery Ajax almacenamiento en caché
- 16. Optimizar APC almacenamiento en caché
- 17. ASP.Net Almacenamiento en memoria caché
- 18. ¿Almacenamiento en caché de Hibernate?
- 19. Teoría del almacenamiento en caché
- 20. Almacenamiento en caché Salida JSON en PHP
- 21. Almacenamiento en caché del navegador de BlackBerry incluso con metaetiquetas sin memoria caché
- 22. Estrategia de almacenamiento en caché, ¿cuándo el almacenamiento en caché se vuelve inútil?
- 23. Restkit, desactivar el almacenamiento en memoria caché
- 24. ¿Patrón de almacenamiento en caché plugable generalizado?
- 25. Almacenamiento en caché de una matriz PHP
- 26. Entrevista pregunta: factoriales y almacenamiento en caché
- 27. Rails.cache.fetch almacenamiento en caché en el desarrollo
- 28. Almacenamiento en caché en JavaFX WebView
- 29. Almacenamiento en caché en asp.net-mvc
- 30. Patrones de almacenamiento en caché en ASP.NET
encuentra un problema para este problema mediante el objeto HttpWebRequest? la respuesta actual proporcionada son todas las soluciones del lado del servidor. (a excepción de la marca de tiempo, que no me gusta) – invalidusername
Por cierto, un buen parámetro es DateTime.Now.Ticks. Siempre cambiará y su tamaño es aceptable (al menos durante las primeras décadas :-)) – invalidusername