6

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

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

4

2 回答 2

4

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

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

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

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

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

于 2010-01-28T21:19:50.580 回答
2

如果您想确保每次检索 xap 文件并且不想担心它 - 只需使用 <param name="source" value="ClientBin/YourSilverlightapp.xap?<%=Guid.NewGuid() .ToString() %>"/>

当然 - 这会导致更重的缓存负载。如果您只想将更改传播到客户端,我确实喜欢上面的辅助方法。

于 2010-06-20T17:50:49.350 回答