【问题标题】:Prevent Silverlight xap from being cached by proxy server防止 Silverlight xap 被代理服务器缓存
【发布时间】:2011-01-10 13:33:49
【问题描述】:
我工作的公司在我们的国际站点之间使用代理/WAN 加速器来缓存 Intranet Web 内容。我有一个 Silverlight 应用程序托管在一个位置的服务器上,但由另一个位置的客户端访问。当用户访问托管 Silverlight 应用程序的网页时,他们会得到代理缓存的陈旧 xap 文件,而不是来自服务器的最新版本。本地用户始终获得最新的 xap,因为他们的请求不通过代理。
我尝试了其他地方提到的各种标头/元数据技术来防止缓存,并且包含的网页本身正在提供新鲜的服务,但我仍然得到旧的 .xap 文件。如果没有让我们的 IT 管理员为我的站点禁用代理缓存,我能做些什么来确保从服务器而不是代理中检索到最新的 xap 文件?包含页面是 ASP.NET。
【问题讨论】:
标签:
silverlight
caching
proxy
xap
【解决方案1】:
如果您想确保每次都会检索 xap 文件并且您不想担心它 - 只需使用
当然——这会增加缓存负载。如果您只想将更改传播到客户端,我确实喜欢上面的辅助方法。
【解决方案2】:
我所做的只是在 xap 文件的路径末尾添加一个查询字符串。然后,当您更改查询字符串变量时,代理等应将其视为对新文件的请求。到目前为止,这对我来说效果很好。
所以基本上,当在一个直接的 HTML 文件中嵌入一个 .xap 时,你会这样做:
<param name="source" value="ClientBin/SilverlightApplication1.xap?cachepreventer=whatevervalue"/>
然后,当您部署新版本时,只需将“whatevervalue”更改为其他内容。
编辑
如果您需要在应用程序的许多地方使用此技术,我会从配置中读取查询字符串值,然后使用 asp.net 将其写入页面。这样,您只需在部署时在一个地方更新它。
【讨论】:
-
在我的 SL 解决方案中,whatevervalue 是磁盘上 XAP 文件的时间戳(记号)。我已经实现了小型 ASP.NET 助手,它将时间戳作为查询附加到文件名。这样,它是完全自动的,您不需要在任何地方更新任何东西——只需将 XAP 放入 ClientBin,当用户尝试获取它时它会自动刷新。然后,在 ASPX 中,我有类似的东西: " />
-