2010-07-22 13 views
7

My Silverlight (4.0) aplikacji (gospodarzem internetowej ASP.NET) wykorzystuje 4 projekty, wszystkie one korzystają z jednego pliku z wersji montażowych:Silverlight: jak zmusić przeglądarkę do pobrania zaktualizowanej wersji klienta?

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

Wersja aktualnie wyświetlanej aplikacji jest 1.0.3842.38865, ale nowsze jeden (1.0.3854.42448) został ostatnio przesłany na serwer.

Problem polega na tym, że przeglądarka nie ładuje nowej aplikacji Silverlight po jej wdrożeniu na serwerze.

Oto kod HTML, który jest używany dla "rendering" Silverlight-html-ładowarki (nie wiem, czy to właściwa nazwa):

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

Próbowałem dodać parametr dla parametru „source” obiektu, który zawiera czas ostatniej modyfikacji pliku XAP-:

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

który powodował błąd w aplikacji Silverlight ładowania:

Unhandled Błąd w Silverlight Kodeksu Application: 2103 Kategoria: InitializeError Wiadomość: Nieprawidłowe lub zniekształcone zastosowanie: Sprawdź manifest

mógłbyś doradzić w jaki sposób zmusić przeglądarkę, aby uzyskać nową aplikację z serwera (bez manipulowania pamięcią podręczną przeglądarki, chciałbym zachować opcję buforowania przeglądarki)?

Dziękuję bardzo!

P.S. Trzeba dodać, że aplikacja silverlight działa (ładowana i uruchamiana) dobrze na moim lokalnym serwerze bez tańca z parametrami. Tylko wtedy, gdy prześlę go na stronę internetową - nie zostanie ponownie załadowany przez przeglądarkę. Dodanie dodatkowych parametrów do ścieżki pliku xap - nie działa na localhost.

+0

Aplikacja zostanie ponownie załadowana po ponownym załadowaniu strony internetowej. Czy chcesz to wymusić? Czy nawet ponowne uruchomienie witryny nie działa? – DHN

+0

Tak, przeładowanie strony internetowej nie powoduje przeładowania aplikacji silverlight – Budda

Odpowiedz

2

Powinno to działać zgodnie z oczekiwaniami, może ma to związek z tym, w jaki sposób dodajesz param. Spróbuj usunąć część Ver=:

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

Użyłem tej metody w przeszłości i jest to najlepszy sposób, aby ominąć żadnych buforowanie po stronie klienta.

Jeśli chcesz zawsze odświeżać i nigdy nie buforować, możesz dodać bieżący DateTime do końca, który będzie zawsze unikatowy. Nie masz pewności, kiedy chcesz to zrobić w prawdziwym świecie, ale świetnie nadaje się do testowania, aby upewnić się, że nigdy nie masz uruchomionej wersji buforowanej. Np .:

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

Jeśli to nie działa, po prostu wyjmij wszystkie razem bez żadnych dodatków do końca i zobacz, czy się załaduje. Mam wrażenie, że błąd jest czymś innym, ponieważ tak naprawdę nie dotyczy lokalizacji pliku xap.

+0

Dodanie czegokolwiek po ".xap" zapobiega pobieraniu i uruchamianiu aplikacji na localhost, więc nie próbowałem sprawdzać tego na prawdziwej stronie internetowej. – Budda

1

Prawidłowe podejście do zarządzania pamięcią podręczną przeglądarki polega na informowaniu jej, czego się od niej oczekuje, poprzez odpowiednie nagłówki odpowiedzi HTTP wysyłane przez serwer.

Menedżer usług IIS określa, że ​​zawartość folderu ClientBin wygasa natychmiast.

Pamiętaj, że nie oznacza to, że Xap będzie pobrany na każde żądanie, tylko że przeglądarka powinna sprawdzić, czy jego kopia w pamięci podręcznej jest aktualna.

+2

Czy istnieje sposób zmuszenia klienta do odświeżenia podczas działania? Mam użytkowników, którzy utrzymują klienta otwarte przez kilka dni. – Jordan

4

Co używamy obecnie jest po którym dostaje ostatni czas zapisu na .xap akt i dołącza go do źródłowego param:

<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

jestem nadal testuje, ale do tej pory, to wygląda na to, że modyfikowanie pliku AssmeblyFileVersion zmusza przeglądarkę do pobrania najnowszego pliku XAP. Korzystając z Silverlight 4, wypróbowałem wiele innych oferowanych rozwiązań i nie mogłem ich uruchomić lub były niepożądane (jak na przykład brak buforowania). Teraz zwiększam wersję pliku i wydaje mi się, że za każdym razem otrzymuję najnowsze xapy.

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

To nie działa w Silverlight 5. –

Powiązane problemy