2010-07-22 40 views
7

My Silverlight (4.0) ứng dụng (được tổ chức bởi trang web ASP.NET) sử dụng 4 dự án, tất cả họ đều sử dụng một tập tin với phiên bản lắp ráp:Silverlight: cách buộc trình duyệt tải xuống phiên bản ứng dụng khách cập nhật?

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

Các phiên bản của ứng dụng đang hiển thị là 1.0.3842.38865, nhưng mới hơn một cái (1.0.3854.42448) được tải lên máy chủ gần đây.

Vấn đề là trình duyệt không tải ứng dụng Silverlight mới sau khi triển khai lên máy chủ.

Đây là một mã HTML được sử dụng để "vẽ" của Silverlight-html-loader (không chắc chắn nếu nó một cái tên chính xác):

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

Tôi đã cố gắng thêm một tham số "nguồn" tham số của đối tượng có chứa thời điểm cuối cùng sửa đổi XAP-file:

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

Điều đó gây ra một lỗi của Silverlight tải ứng dụng:

012.

Unhandled Lỗi trong Silverlight ứng dụng Mã số: 2103 Thể loại: InitializeError nhắn: ứng dụng không hợp lệ hoặc bị thay đổi: Kiểm tra manifest

Ông có thể xin tư vấn làm thế nào để buộc trình duyệt để có được ứng dụng mới từ máy chủ (mà không có thao tác bộ nhớ cache của trình duyệt, tôi muốn giữ tùy chọn bộ nhớ đệm của trình duyệt)?

Cảm ơn bạn rất nhiều!

P.S. Nó là cần thiết để thêm rằng ứng dụng Silverlight hoạt động (tải lên và đưa ra) tốt trên localhost của tôi mà không có bất kỳ nhảy múa với các thông số. Chỉ khi tôi tải nó lên trang web - nó không được tải lại bởi trình duyệt. Và thêm các tham số bổ sung vào đường dẫn xap-file - không hoạt động trên localhost.

+0

Ứng dụng được tải lại khi trang web được tải lại. Bạn có muốn thực thi điều này không? Hoặc thậm chí việc tải lại trang web không hoạt động? – DHN

+0

Có, tải lại trang web không làm cho tải lại ứng dụng Silverlight – Budda

Trả lời

2

Điều này sẽ hoạt động như mong đợi, có thể nó có liên quan đến cách bạn thêm thông số. Hãy thử loại bỏ các phần Ver=:

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

Tôi đã sử dụng phương pháp này trong quá khứ và nó là cách tốt nhất để có được xung quanh bất kỳ bộ nhớ đệm phía khách hàng.

Nếu bạn muốn nó luôn luôn làm mới và không bao giờ bộ nhớ cache bạn chỉ có thể thêm DateTime hiện tại vào cuối mà sẽ luôn luôn là duy nhất là tốt. Bạn không chắc chắn khi nào bạn muốn làm điều này trong một kịch bản thế giới thực nhưng nó là tuyệt vời để thử nghiệm để đảm bảo bạn không bao giờ có một phiên bản cache chạy. Ví dụ:

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

Nếu điều này không hoạt động, chỉ cần xóa tất cả cùng nhau mà không thêm phần cuối và xem liệu nó có tải không. Tôi có một cảm giác rằng lỗi là một cái gì đó khác vì nó không thực sự áp dụng cho vị trí của tập tin xap.

+0

Thêm bất kỳ nội dung nào sau ".xap" ngăn ứng dụng tải xuống và khởi chạy trên máy chủ cục bộ, vì vậy tôi không cố gắng kiểm tra điều này trên trang web thực. – Budda

1

Cách tiếp cận chính xác để quản lý bộ nhớ cache của trình duyệt là cho bạn biết điều bạn mong đợi về nó thông qua các tiêu đề phản hồi http do máy chủ gửi đi.

Trong trình quản lý IIS xác định rằng nội dung của thư mục ClientBin hết hạn ngay lập tức.

Lưu ý rằng các từ không có nghĩa là tải xuống Xap trên mọi yêu cầu, chỉ cần trình duyệt nên kiểm tra xem bản sao được lưu trong bộ nhớ cache của bạn có được cập nhật hay không.

+2

Có cách nào để buộc khách hàng làm mới khi đang chạy không? Tôi có người dùng đang giữ khách hàng mở cửa trong nhiều ngày. – Jordan

4

Những gì chúng ta đang sử dụng là sau đó nhận được ghi cuối cùng thời điểm .xap-file và gắn nó vào nguồn-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

tôi vẫn đang thử nghiệm, nhưng cho đến nay, nó có vẻ như sửa đổi AssmeblyFileVersion buộc trình duyệt tải xuống tệp xap mới nhất. Sử dụng Silverlight 4, tôi đã thử nhiều giải pháp khác được cung cấp và không thể khiến chúng hoạt động hoặc chúng không mong muốn (như không có bộ đệm ẩn). Bây giờ tôi đang tăng lên phiên bản tập tin, và nó có vẻ để lấy xap mới nhất mọi thời gian.

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

Điều này dường như không hoạt động trong Silverlight 5. –

Các vấn đề liên quan