我的Silverlight(4.0)应用程序(由ASP.NET网站托管)使用4个项目,它们都使用一个带汇编版本的文件:
[assembly: AssemblyVersion("1.0.*")]
当前显示的应用程序的版本是1.0.3842.38865,但最近的应用程序(1.0.3854.42448)最近上传到服务器。
问题是浏览器在部署到服务器后没有加载新的Silverlight应用程序。
这是一个HTML代码,用于“渲染”silverlight-html-loader(不确定它是否是正确的名称):
<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文件修改时间的对象的“source”参数中添加一个参数:
<param name="source" value="/ClientBin/VfmElitaSilverlightClientApplication.xap?Ver=2010072243523AM"/>
导致Silverlight应用程序加载错误:
Silverlight中的未处理错误 申请代码:2103类别: InitializeError消息: 申请无效或格式错误: 检查清单
请问您如何强制浏览器从服务器获取新的应用程序(没有浏览器缓存操作,我想保留浏览器缓存选项)?
非常感谢!
P.S。有必要添加silverlight应用程序在我的localhost上工作(上传和启动)没有任何参数跳舞。只有当我将其上传到网站时 - 它才会被浏览器重新加载。并在xap文件路径中添加其他参数 - 对localhost无效。
答案 0 :(得分:4)
我们目前使用的是以下内容,它获取.xap文件的最后写入时间并将其附加到source-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 ...
答案 1 :(得分:4)
我还在测试,但到目前为止,似乎修改 AssmeblyFileVersion 会强制浏览器下载最新的xap文件。使用Silverlight 4,我尝试了许多其他提供的解决方案,无法让它们工作或者它们是不受欢迎的(就像根本没有缓存一样)。现在我正在递增文件版本,它似乎每次都抓住最新的xap。
[assembly: AssemblyFileVersion("1.0.0.1234")]
答案 2 :(得分:2)
这应该按预期工作,也许它与你如何附加参数有关。请尝试删除Ver=
部分:
<param name="source"
value="/ClientBin/VfmElitaSilverlightClientApplication.xap?2010072243523AM"/>
我以前使用过这种方法,这是绕过任何客户端缓存的最佳方式。
如果您希望它始终刷新并且永不缓存,您只需将当前DateTime
添加到结尾,这也将始终是唯一的。不知道什么时候你想在现实世界的场景中这样做,但它非常适合测试,以确保你永远不会运行缓存版本。例如:
<param name="source"
value="/ClientBin/VfmElitaSilverlightClientApplication.xap?<%= DateTime.Now.Ticks.ToString() "/>
如果这不起作用,只需将它们全部移除,不添加到末尾,看看它是否加载。我有一种感觉,错误是其他的,因为它并不真正适用于xap文件的位置。
答案 3 :(得分:1)
管理浏览器缓存的正确方法是通过服务器发送的适当的http响应标头告诉它您对它的期望。
在IIS管理器中,指定ClientBin文件夹的内容立即过期。
请注意,这并不意味着每次请求都会下载Xap,只是浏览器应该检查其缓存副本是否是最新的。