2010-07-22 3 views
7

My Silverlight (4.0) приложение (поддерживаемое сайт ASP.NET) использует 4 проект, все они используют один файл с сборочной версией:Silverlight: как заставить браузер загружать обновленную версию клиента?

[assembly: AssemblyVersion("1.0.*")] 

Версия отображаемого в данный момент приложения 1.0.3842.38865, но новее один (1.0.3854.42448) загружается на сервер в последнее время.

Проблема заключается в том, что браузер не загружает новое приложение Silverlight после его развертывания на сервер.

Вот HTML-код, который используется для "визуализации" в Silverlight-HTML-погрузчик (не уверен, если это правильное название):

<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> 

Я попытался добавить параметр с параметром «источник» объект, который содержит время последней модификации XAP-файл:

<param name="source" value="/ClientBin/VfmElitaSilverlightClientApplication.xap?Ver=2010072243523AM"/> 

Это вызвало ошибку Silverlight загрузки приложения:

Неизвестное Ошибка в Silverlight кодексе Применения: 2103 Категории: InitializeError Сообщения: Неверное или неправильно применение: Проверить манифест

Не могли бы вы посоветовать, как заставить браузер, чтобы получить новое приложение с сервера (без манипулирования кешем браузера, я хотел бы сохранить параметр кэширования браузера)?

спасибо!

P.S. Необходимо добавить, что приложение silverlight работает (загружено и запущено) отлично на моем локальном хосте без каких-либо танцев с параметрами. Только когда я загружаю его на веб-сайт, он не перезагружается браузером. И добавление дополнительных параметров в путь к xap-файлу - не работает на localhost.

+0

Приложение перезагружается при перезагрузке веб-сайта. Вы хотите добиться этого? Или даже перезагрузка веб-сайта не работает? – DHN

+0

Да, перезагрузка веб-сайта не вызывает перезагрузки приложения silverlight. – Budda

ответ

2

Это должно работать должным образом, возможно, оно имеет какое-то отношение к тому, как вы добавляете параметр. Попробуйте удалить Ver= части:

<param name="source" 
    value="/ClientBin/VfmElitaSilverlightClientApplication.xap?2010072243523AM"/> 

Я использовал этот метод в прошлом, и это лучший способ, чтобы обойти любую сторону клиента кэширование.

Если вы хотите всегда обновлять и не кэшировать, вы можете просто добавить текущий DateTime в конец, который всегда будет уникальным. Не уверен, когда вы захотите сделать это в сценарии реального мира, но это отлично подходит для тестирования, чтобы гарантировать, что у вас никогда не будет кешированной версии. Например:

<param name="source" 
    value="/ClientBin/VfmElitaSilverlightClientApplication.xap?<%= DateTime.Now.Ticks.ToString() "/> 

Если это не работает, просто удалите все это вместе без добавления в конец и посмотрите, загружается ли он. У меня такое чувство, что ошибка - это что-то еще, так как это не относится к местоположению файла xap.

+0

Добавление чего-либо после «.xap» предотвращает загрузку и запуск приложений на локальном хосте, поэтому я не пытался проверять это на реальном веб-сайте. – Budda

1

Правильный подход к управлению кешем браузеров заключается в том, чтобы рассказать ему, что вы ожидаете от него, с помощью утвержденных заголовков ответов HTTP, отправленных сервером.

В диспетчере IIS указывается, что содержимое папки ClientBin должно быть немедленно истекло.

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

+2

Есть ли способ заставить клиента обновляться во время его работы? У меня есть пользователи, которые держат клиента открытым в течение нескольких дней. – Jordan

4

Что мы используем в настоящее время, заключается в следующем, который получает время последней записи в .xap-файла и присоединяет его к исходному-парам:

<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 ... 
4

Я все еще тестируется, но до сих пор, это что модификация AssmeblyFileVersion заставляет браузер загружать последний файл xap. Используя Silverlight 4, я пробовал многие другие предлагаемые решения и не мог заставить их работать, или они были нежелательны (например, никакого кэширования вообще). Теперь я увеличиваю версию файла, и, кажется, каждый раз захватывает последний xap.

[assembly: AssemblyFileVersion("1.0.0.1234")] 
+1

Это, похоже, не работает в Silverlight 5. –

Смежные вопросы