Принудительная загрузка браузерами Silverlight xap после обновления - PullRequest
30 голосов
/ 12 ноября 2009

У меня есть элемент управления Silverlight, упакованный и развернутый в веб-части SharePoint. У меня возникают проблемы с загрузкой браузером новых версий элемента управления после отправки обновления. Я обновляю версию сборки и файла моего проекта xap, но это не имеет значения. Единственный способ заставить браузер загрузить новый xap - это зайти и удалить временные интернет-файлы. Для меня, во время разработки, это нормально, но мне нужно найти решение, прежде чем наступит время для производства. Есть идеи?

Ответы [ 4 ]

38 голосов
/ 12 ноября 2009

Это связано с тем, как ваш браузер обрабатывает запросы ресурсов. У Flash есть схожие проблемы, и есть несколько обходных путей.

Вот статья , в которой подробно описана проблема и возможные решения.

Я бы предложил сделать что-то вроде этого:

Скажем, у вас есть это для вашего xap в html:

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

Я бы сделал версию так, что когда бы вы ни делали нажатие, вы меняете номер версии. Пример:

<param name="source" value="ClientBin/myApp.xap?ver=1"/>
2 голосов
/ 19 августа 2013

Не редко можно использовать кеширование .XAP, что означает, что каждый раз, когда вы развертываете новую версию приложения Silverlight, браузер не загружает обновленный файл .XAP.

Одним из решений может быть изменение свойств IIS. Вы можете включить опцию «Включить HTTP-заголовок истечения срока действия» для вашего файла .XAP, выполнив следующие действия:

Open IIS Manager
Go to “Default Web Site” and find web site for your Silverlight project.
Find the .XAP file under ClientBin.
Go to the properties page of the .XAP file, on HTTP Headers Tab, Turn on “Enable Content Expiration”, click the “Expire Immediately” radio button.
Save the changes.

Таким образом, последняя версия .XAP (только при наличии последней версии файла .XAP) будет загружена при обновлении страницы без необходимости закрытия браузера.

Надеюсь, это поможет!

2 голосов
/ 17 декабря 2011

Отлично! Работал даже в разработке Windows Phone.

Я поставил строку:

NavigationService.Navigate(new Uri("/Game.xaml?versao="+version, UriKind.RelativeOrAbsolute));

А затем переопределить метод OnNavigatedTo:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    string var;
    if (NavigationContext.QueryString.TryGetValue("version", out var))
    {
        ...
    }
}
1 голос
/ 12 февраля 2014

поместите следующий файл web.config в ClientBin

<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMaxAge="0.00:00:01" cacheControlMode="UseMaxAge"/>
    </staticContent>
  </system.webServer>
</configuration>
...