ver teclas historial google deja como cache borrar silverlight firefox

teclas - ¿Cómo fuerza a Firefox a no almacenar en caché o volver a descargar un archivo Silverlight XAP?



firefox no me deja borrar el historial (17)

Cuando trabajo con Silverlight, me he dado cuenta de que Firefox guardará en caché el archivo XAP, de modo que si realizo una actualización, un usuario puede quedarse atrapado utilizando una versión desactualizada. ¿Hay alguna manera de forzar al navegador a volver a descargar el archivo XAP cada vez, o quizás solo forzarlo después de que se haya publicado una actualización? ¿O hay una configuración en la configuración de Silverlight que impide que el navegador guarde en caché el archivo XAP por completo?

Gracias, jeff


Agregar la marca de tiempo para XAP funcionó para mí (estoy agregando el control SL en JavaScript, pero esto podría hacerse fácilmente en línea):

var appTimestamp = ''<%= System.IO.File.GetLastWriteTime(Server.MapPath("ClientBin/MyApp.xap")) %>''; var source = ''ClientBin/MyApp.xap?appTimestamp='' + appTimestamp;



Esto es lo que hago en php. Usted lee la fecha / hora del archivo xap y lo agrega como parámetro al enlace de descarga. De esta forma, el navegador ve nuevas versiones de archivos como nuevos enlaces y, por lo tanto, no en su caché.

<?php $fdate = date("dHis",filemtime("MyApp.xap")) ?> <param name="source" value="MyApp.xap?=<?php echo $fdate ?>"/>

Simple y funciona. Además, los navegadores continúan almacenando en caché correctamente cuando no hay actualizaciones para descargar.


Esto probado y funcionando:

Pon esto:

<% const string sourceValue = @"ClientBin/MyXapFile.xap"; string param; if(System.Diagnostics.Debugger.IsAttached) param = "<param name=/"source/" value=/"" + sourceValue + "/" />"; else { var xappath = HttpContext.Current.Server.MapPath(@"") + @"/" + sourceValue; var xapCreationDate = System.IO.File.GetLastWriteTime(xappath); param = "<param name=/"source/" value=/"" + sourceValue + "?ignore=" + xapCreationDate + "/" />"; } Response.Write(param); %>

En lugar de esto:

<param name="source" value="ClientBin/MyXapFile.xap" />


Hasta el momento, la única solución que he encontrado, una vez que ocurre el problema, es borrar el caché de Firefox.

Una mejor solución sería mucho mejor.


La cadena de consulta funciona perfectamente, pero no utilizaría DateTime.Now , porque obliga al usuario a volver a descargar la aplicación cada vez. En cambio, usamos lo siguiente:

protected void Page_Load(object sender, EventArgs e) { var versionNumber = Assembly.GetExecutingAssembly().GetName().Version.ToString(); this.myApp.Source += "?" + versionNumber; }

De esta forma, todo lo que tiene que hacer es incrementar el número de versión en el archivo AssemblyInfo.cs .


La idea de cadena de consulta no funciona para mí en Silverlight 4. El servidor parece almacenar en caché el xap zurcido (aunque no el archivo aspx). La solución que funciona en SL4 es ir a las propiedades en su proyecto de Silverlight, vaya a Información del ensamblaje y coloque una versión.


La manera más simple:

<param name="source" value="ClientBin/App.xap?<%= DateTime.Now.Ticks %>" />


Me estoy poniendo esto a trabajar por una combinación de las sugerencias anteriores:

  1. Establecer atributos meta-tag cache-control / pragma http-equiv en ''No-Cache''
  2. Utilice una página ASP.NET para alojar el control Silverlight (a diferencia de una página html)
  3. Establezca la propiedad Source del control de Silverlight de ASP.NET en el código subyacente, agregando un sello de tiempo a la url de .xap. Ej.

    Silverlight1.Source = "ClientBin / MyApplication.xap?" + DateTime.Now.ToString ("dd-MM-a-HH: mm: ss");


Otra solución sería agregar la versión del archivo XAP en lugar de una marca de tiempo. La marca de tiempo cambiará cada vez (también podría desactivar el almacenamiento en caché). Hacer que cambie solo cuando el XAP se haya actualizado sería tomar información del archivo XAP. Todavía estoy investigando qué podría usar, tal vez la última fecha modificada del archivo XAP.


Para mí, la mejor respuesta es de Chris Cairns . Acabo de adaptarlo un poco, llamando a ToString y GetHashCode, generando una ID para la marca de tiempo:

<param name="source" value="ClientBin/App.xap?<%= System.IO.File.GetLastWriteTime(Server.MapPath("ClientBin/App.xap")).ToString().GetHashCode()%>" />

Funciona bien!


Puede agregar la url de origen en la etiqueta de objeto con la fecha de última escritura del archivo XAP. Verifica el código en mi blog .


Puede enviar encabezados HTTP para evitar que cacheen:

Cache-control: no-cache Pragma: no-cache

Cómo lo hace depende del servidor web que esté utilizando.


También estamos en la misma situación en la que queremos controlar cuando el archivo .XAP se descarga al navegador.

Un enfoque que tal vez quiera analizar es utilizar Silverlight Isolated Storage como "caché" para almacenar sus archivos .XAP.

Mira este blog: IsolatedStorage como un caché de objetos de Silverlight


Tuve este problema así que ahora cuando inicio una nueva aplicación configuro la versión de ensamblaje a 0.0.0.1 y simplemente la actualizo en una en cada implementación, parece que la resolví por mí. Luego, simplemente vuelva a configurarlo en la versión 1.0.0.0.


Una idea súper simple: simplemente agrega una cadena de consulta falsa a la url.

<param name="source" value="app.xap?r12345"/>

La mayoría de los servidores deben ignorarlo y server el archivo normalmente, depende de su servidor. Si se vuelve realmente listo, puede hacer que la página de alojamiento sea dinámica y anexar automáticamente una cadena de conteo o cadena de fecha y hora a la cadena de consulta. Esto garantiza que obtendrá el almacenamiento en caché cuando lo desee, pero forzará una descarga cuando haya un cambio.

Idealmente, su servidor debería hacer esto por usted. Pero si no...


Yo uso blog

<object id="Xaml1" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> <%––<param name="source" value="ClientBin/SilverlightApp.xap"/>––%> <% string orgSourceValue = @"ClientBin/SilverlightApp.xap"; string param; if (System.Diagnostics.Debugger.IsAttached) param = "<param name=/"source/" value=/"" + orgSourceValue + "/" />"; else { string xappath = HttpContext.Current.Server.MapPath(@"") + @"/" + orgSourceValue; DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath); param = "<param name=/"source/" value=/"" + orgSourceValue + "?ignore=" + xapCreationDate.ToString() + "/" />"; } Response.Write(param); %> <param name="onError" value="onSilverlightError"