.net - para - Silverlight: ¿cómo obligar al navegador a descargar la versión actualizada del cliente?
silverlight para mac (4)
El enfoque correcto para administrar la memoria caché de los navegadores es decirle lo que espera de ella a través de los encabezados de respuesta HTTP apropiados que envía el servidor.
En el administrador de IIS, especifique que el contenido de la carpeta ClientBin caduque de inmediato.
Tenga en cuenta que esto no significa que el Xap se descargará en cada solicitud, solo que el navegador debe verificar que su copia almacenada en caché esté actualizada.
La aplicación My Silverlight (4.0) (alojada en el sitio web ASP.NET) usa 4 proyectos, todos usan un archivo con la versión de ensamblaje:
[assembly: AssemblyVersion("1.0.*")]
La versión de la aplicación que se muestra actualmente es 1.0.3842.38865, pero la más reciente (1.0.3854.42448) se ha subido recientemente al servidor.
El problema es que el navegador no carga la nueva aplicación Silverlight después de su implementación en el servidor.
Aquí hay un código HTML que se utiliza para "renderizar" de silverlight-html-loader (no estoy seguro si es un nombre correcto):
<div id="silverlightControlHost" style="height:950px">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="/ClientBin/VfmElitaSilverlightClientApplication.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="initParams" value="adr=squad,team=811,match=3217203" />
<param name="minRuntimeVersion" value="3.0.40624.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
<iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
Intenté agregar un parámetro al parámetro "fuente" del objeto que contiene la hora de la última modificación del archivo XAP:
<param name="source" value="/ClientBin/VfmElitaSilverlightClientApplication.xap?Ver=2010072243523AM"/>
Eso causó un error de carga de la aplicación Silverlight:
Error no controlado en Silverlight Código de aplicación: 2103 Categoría: InitializeError Mensaje: aplicación no válida o mal formada: comprobar manifiesto
¿Podría indicarnos cómo forzar al navegador a obtener una nueva aplicación del servidor (sin manipular el caché del navegador, me gustaría mantener la opción de caché del navegador)?
¡Muchas gracias!
PD Es necesario agregar que la aplicación Silverlight funciona (cargada y lanzada) bien en mi servidor local sin ningún baile con parámetros. Solo cuando lo subo al sitio web, el navegador no lo vuelve a cargar. Y agregar parámetros adicionales a la ruta del archivo xap - no funciona en el host local.
Esto debería funcionar como se esperaba, tal vez tiene algo que ver con la forma en que está agregando el parámetro. Intente eliminar la porción Ver=
<param name="source"
value="/ClientBin/VfmElitaSilverlightClientApplication.xap?2010072243523AM"/>
He utilizado este método en el pasado y es la mejor manera de evitar el almacenamiento en caché del lado del cliente.
Si desea que siempre se actualice y nunca se almacene en caché, puede agregar el DateTime
actual al final, que siempre será único. No estoy seguro de cuándo querría hacer esto en un escenario del mundo real, pero es genial para las pruebas para garantizar que nunca tenga una versión almacenada en caché. P.ej:
<param name="source"
value="/ClientBin/VfmElitaSilverlightClientApplication.xap?<%= DateTime.Now.Ticks.ToString() "/>
Si esto no funciona, simplemente quítelo todo sin agregarlo al final y vea si se carga. Tengo la sensación de que el error es otra cosa, ya que no se aplica realmente a la ubicación del archivo xap.
Lo que usamos actualmente es el siguiente que obtiene el último tiempo de escritura del archivo .xap y lo agrega al parámetro-fuente:
<object ... >
<%
var source = "ClientBin/App.xap";
string param;
if (System.Diagnostics.Debugger.IsAttached)
param = string.Format("<param name=/"source/" value=/"{0}/" />", source);
else
{
var path = HttpContext.Current.Server.MapPath(string.Empty) + "//" + source;
var xapCreatedAt = System.IO.File.GetLastWriteTime(path);
param = string.Format("<param name=/"source/" value=/"{0}?version={1}/" />",
source,
xapCreatedAt.ToString("yyyyMMddTHHmmssfff"));
}
Response.Write(param);
%>
<param ...
Todavía estoy probando, pero hasta ahora, parece que la modificación de AssmeblyFileVersion obliga al navegador a descargar el último archivo xap. Al usar Silverlight 4, probé muchas de las otras soluciones ofrecidas y no pude hacer que funcionaran o no eran deseables (como que no había caché en absoluto). Ahora estoy incrementando la versión del archivo, y parece tomar el último xap todo el tiempo.
[assembly: AssemblyFileVersion("1.0.0.1234")]