webbrowser tutorial que ejemplos application c# asp.net wpf xbap

c# - tutorial - ¿Cómo actualizar XBAP a la última versión en la computadora cliente?



wpf vs windows forms (7)

Desarrollé una aplicación de navegador XAML (XBAP) que está incrustada dentro de una página web ASP.NET. Estoy teniendo problemas para obtener la última versión de XBAP para actualizar en la computadora cliente. Durante el desarrollo, tuve que usar la herramienta Mage.exe para borrar la caché de la aplicación para que mis cambios se vean cuando se ejecutan en mi computadora local. Además de ejecutar Mage.exe -cc en la línea de comandos, también encontré que rundll32 dfshim CleanOnlineAppCache también funciona.

Sin embargo, no quiero pedir a los clientes que ejecuten ningún comando en la línea de comandos. ¿Qué tendré que hacer para que XBAP se actualice automáticamente en la computadora cliente? En lugar de la actualización de XBAP actualizada en el equipo cliente, la versión anterior de XBAP continúa ejecutándose.

Actualizar

Creé una recompensa por esta pregunta porque tengo el mismo problema. Por lo que leo en línea, se supone que los XBAP deben comparar la versión almacenada en caché con la versión # del servidor web y descargar la nueva versión si es diferente. He verificado que mis números de versión son diferentes, pero la copia en caché sigue siendo la que se está ejecutando cuando ejecuto el XBAP.

La copia en caché también aparece si lanzo el XBAP fuera de la página asp.net, aunque sí obtengo la nueva versión si cambio los parámetros de URL.

Actualización # 2

Descubrí que el XBAP se actualiza automáticamente en máquinas XP de 32 bits, pero no en mi máquina con Windows 7 de 64 bits.


ClickOnce trabajó para mí como un encanto. También asegúrese de que está versionando su XBAP correctamente.


El almacenamiento en caché de la aplicación se realiza mediante el almacenamiento en caché de los archivos de manifiesto, cuando cambian las firmas de los manifiestos, el tiempo de ejecución actualizará los archivos locales (además, solo actualizará los archivos modificados). Solo asegúrate de que tienes los encabezados correctos enviados en las respuestas HTTP. A veces, la configuración de la memoria caché de las páginas dinámicas o la configuración global de los proveedores de alojamiento interfieren. Para mí, siempre funciona fuera de la caja.


Hace años, tuvimos este problema con un sitio web ordinario. Nos perseguía, y al final, terminamos cambiando el prefijo de URL para cada nueva versión. La primera página nunca se almacenó en caché y se reenvió a la URL actualizada.

Es una solución, lo sé, pero muy confiable.


Implemento mi Xbap simplemente copiando el archivo de prueba al directorio ClientBin en mi proyecto web. Lo muestro en iframe. Para hacer que la aplicación "actualice" la versión, tengo que cambiar "Publicar versión" en el proyecto Xbap antes de compilar. Propiedades del proyecto -> Publicar -> Publicar versión.

Esto cambia la versión en xbap y el archivo de manifiesto obligando a los clientes a descargar la versión más reciente.


Puede utilizar ClickOnce para implementar su aplicación. Si desea forzar al usuario a actualizar, simplemente configure la versión mínima requerida para la aplicación (se encuentra en el cuadro de diálogo Actualizaciones de la aplicación).


Puedes probar algo como esto, aunque yo lo uso en XAP, no en XBAP, también podría funcionar para ti:

(Sigue un fragmento)

public partial class App : Application { /// <summary> /// Creates a new <see cref="App"/> instance. /// </summary> public App() { Application.Current.CheckAndDownloadUpdateAsync(); // rest of code

EDITAR

Iba a sugerir un incremento en el número de versión entre publicaciones, pero parece que ya se ha solucionado. ¿Ocurre este comportamiento en todos los navegadores? Podría ser algún error / rareza específico de IE (he visto muchos malos comportamientos solo de IE ... no me sorprendería)


sin los encabezados de caché correctos, su navegador puede estar impidiendo la descarga del xbap.

Borrar caché para ver si esto lo arregla.

alternativamente utilice:

<%string versionInfo = typeof (AVSTX.POS.WebMvc.Controllers.HomeController).Assembly.GetName().Version.ToString(); %> <param name="source" value="<%=ResolveUrl("~/ClientBin/AVSTX.POS.WebRia.xap?version=" + versionInfo) %>"/>

para crear una nueva url que el navegador no puede almacenar en caché en este punto. Se basa en la inspección de la versión de ensamblaje del host, así que asegúrese de incrementar [ensamblado: AssemblyVersion ("3.4.9.0")] [ensamblado: AssemblyFileVersion ("3.4.9.0")]

Esta solución no resolverá los módulos dinámicos que puede descargar en el futuro. Tendrá que arreglar los encabezados de caché reales si este es su problema.

edición 1: código para deshabilitar el almacenamiento en caché del navegador

//http://.com/questions/1160105/asp-net-mvc-disable-browser-cache //http://developer.yahoo.com/performance/rules.html#expires //http://ray.jez.net/prevent-client-side-caching-with-httpmodules/ //http://.com/questions/2281919/expiry-silverlight-xap-file-from-browser-cache-programmatically public class XapFileHttpModule : IHttpModule { #region IHttpModule Members public void Init(HttpApplication context) { context.BeginRequest += context_BeginRequest; } public void Dispose() { } private void context_BeginRequest(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; if(context.Request.FilePath.Contains(".xap")) { context.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); context.Response.Cache.SetValidUntilExpires(false); context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); context.Response.Cache.SetCacheability(HttpCacheability.NoCache); context.Response.Cache.SetNoStore(); } } #endregion }