防止Silverlight xap被代理服务器缓存

时间:2010-01-28 19:19:43

标签: silverlight caching proxy xap

我工作的公司在我们的国际站点之间有代理/ WAN加速器来缓存Intranet Web内容。我有一个Silverlight应用程序托管在一个位置的服务器上,但是被另一个位置的客户端访问。当用户访问托管Silverlight应用程序的网页时,他们会获得代理缓存的陈旧xap文件,而不是服务器的最新版本。本地用户总是获得最新的xap,因为他们的请求不是通过代理。

我尝试了其他地方提到的各种标头/元数据技术来防止缓存,并且包含的​​网页本身正在提供新的,但我仍然得到旧的.xap文件。如果没有让我们的IT管理员为我的网站禁用代理缓存,我能做些什么来确保从服务器而不是代理检索最新的xap文件?包含页面是ASP.NET。

2 个答案:

答案 0 :(得分:4)

我所做的只是在xap文件路径的末尾添加一个查询字符串。然后,当您更改querystring变量时,代理等应将其视为对新文件的请求。到目前为止,这对我来说很好。

所以基本上,当将.xap嵌入到直接的HTML文件中时,你会这样做:

<param name="source" value="ClientBin/SilverlightApplication1.xap?cachepreventer=whatevervalue"/>

然后当您部署新版本时,只需将“whatevervalue”更改为其他内容。

修改
如果你需要在你的应用程序的许多地方使用这种技术,我会从配置中读取查询字符串值,并使用asp.net将其写入页面。这样,您只需在部署时在一个位置更新它。

答案 1 :(得分:2)

如果你想确保每次检索xap文件并且你不想担心它 - 只需使用 &lt; param name =“source”value =“ClientBin / YourSilverlightapp.xap?&lt;%= Guid.NewGuid()。ToString()%&gt;”/&gt;

当然 - 这有助于增加缓存负载。如果您只想将更改传播到客户端,我确实喜欢上面的帮助方法。