Подтвердить что ты не робот

Как обновить XBAP до последней версии на клиентском компьютере?

Я разработал приложение браузера XAML (XBAP), встроенное в веб-страницу ASP.NET. У меня возникла проблема с обновлением последней версии XBAP на клиентском компьютере. Во время разработки мне пришлось использовать средство Mage.exe, чтобы очистить кэш приложения, чтобы изменения менялись при работе на моем локальном компьютере. Помимо выполнения Mage.exe -cc в командной строке, я также нашел, что rundll32 dfshim CleanOnlineAppCache работает так же хорошо.

Однако я не хочу просить клиентов запускать какие-либо команды в командной строке. Что мне нужно сделать, чтобы автоматическое обновление XBAP на клиентском компьютере? Вместо обновленного обновления XBAP на клиентском компьютере предыдущая версия XBAP продолжает работать.

Обновление

Я создал щедрость по этому вопросу, потому что у меня такая же проблема. Из того, что я читал в Интернете, XBAP должны сравнивать кешированную версию # с версией № одной на веб-сервере и загружать новую версию, если она отличается. Я проверял, что мои номера версий разные, но кешированная копия по-прежнему остается той, которая запускается при запуске XBAP.

Кэшированная копия также появляется, если я запускаю XBAP за пределами страницы asp.net, хотя я получаю новую версию, если меняю параметры URL.

Обновление # 2

Я обнаружил, что XBAP автоматически обновляет 32-разрядные компьютеры XP, но не на моей 64-разрядной машине Windows 7.

4b9b3361

Ответ 1

Вы можете попробовать что-то вроде этого, хотя я использую его в XAP, а не XBAP, это может сработать и для вас:

(следует фрагмент)

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

ИЗМЕНИТЬ

Предлагалось увеличить число версий между публикациями, но, похоже, это уже было позабочено. Это происходит во всех браузерах? Может быть какая-то ошибка/странность IE-специфики (я видел много ошибок в IE только... не удивил бы меня)

Ответ 2

Несколько лет назад у нас была эта проблема с обычным сайтом. Это продолжало преследовать нас, и, в конце концов, мы закончили тем, что изменили префикс URL для каждой новой версии. Самая первая страница никогда не кэшировалась и перенаправлялась на обновленный URL-адрес.

Его обходной путь, я знаю, но очень надежный.

Ответ 3

без правильных заголовков кешей ваш браузер может препятствовать загрузке xbap.

очистить кеш, чтобы убедиться, что это исправление.

альтернативно использовать:

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

чтобы создать новый URL-адрес, который браузер не может кэшировать в этот момент. Он основан на проверке версии сборки хоста, поэтому убедитесь, что она увеличивается [сборка: AssemblyVersion ( "3.4.9.0" )] [сборка: AssemblyFileVersion ( "3.4.9.0" )]

это решение не решит динамические модули, которые вы можете загрузить в будущем. вам нужно будет исправить фактические заголовки кеша, если это ваша проблема.

edit 1: код для отключения кеширования браузера

    //http://stackoverflow.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://stackoverflow.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
}

Ответ 4

Вы можете использовать ClickOnce для развертывания вашего приложения. Если вы хотите заставить пользователя обновить только установленную минимальную требуемую версию приложения (это в диалоговом окне "Обновления приложений" ).

Ответ 5

Кэширование приложений выполняется с помощью кэширования файлов манифеста, когда проявляются изменения подписи, среда выполнения обновляет локальные файлы (к тому же он просто обновляет измененные файлы). Просто убедитесь, что у вас есть правильные заголовки, отправленные по HTTP-ответам. Иногда вмешиваются настройки параметров динамических страниц или глобальные настройки хостинг-провайдеров. Для меня он всегда работает из коробки.

Ответ 6

ClickOnce работал у меня как шарм. Также убедитесь, что вы правильно управляете своим XBAP.

Ответ 7

Я развертываю свой Xbap, просто скопировав файл в каталог ClientBin в своем веб-проекте. Я показываю его в iframe. Чтобы обновить версию приложения, мне нужно изменить "Опубликовать версию" в проекте Xbap перед сборкой. Свойства проекта → Опубликовать → Опубликовать версию.

Это изменяет версию в файле xbap и manifest, заставляя клиенты загружать новейшую версию.