防止代理服务器缓存Silverlight xap

防止代理服务器缓存Silverlight xap,silverlight,caching,proxy,xap,Silverlight,Caching,Proxy,Xap,我工作的公司在我们的国际站点之间有代理/WAN加速器,用于缓存内部网web内容。我有一个Silverlight应用程序托管在一个位置的服务器上,但被另一个位置的客户端访问。当用户访问承载Silverlight应用程序的网页时,他们会从服务器获得由代理缓存的过时xap文件,而不是最新版本。本地用户总是获得最新的xap,因为他们的请求没有通过代理 我已经尝试了其他地方提到的各种头/元数据技术来防止缓存,并且包含的网页本身正在重新提供,但是我仍然得到了旧的.xap文件。除了让我们的IT管理员为我的站点

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


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

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

因此,基本上,在将.xap嵌入到一个简单的HTML文件中时,您可以这样做:

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

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

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

如果您想确保每次检索xap文件时都不必担心,只需使用


当然,这会增加缓存负载。不过,如果您只希望将更改传播到客户端,我确实喜欢上面的helper方法。

在我的SL解决方案中,whatevervalue是磁盘上XAP文件的时间戳(勾号)。我已经实现了小型ASP.NET帮助程序,它将时间戳作为查询附加到文件名。这样,它是完全自动的,您不需要在任何地方更新任何内容——只需将XAP放入ClientBin,当用户尝试获取它时,它会自动刷新。然后,在ASPX中,我有这样的想法:这真的很聪明。我可能会决定改用那种技术。