【发布时间】:2011-08-17 12:31:56
【问题描述】:
正如another question 中提到的,我们在我们的项目中使用了 WCF-RIA 服务并结合了 silverlight 导航框架。部分是搜索功能。一个搜索按钮将导航到一个特殊的搜索页面,将搜索查询放在 url 中,然后将触发服务器上的 RIA 请求。
对于这个请求,我们使用这个属性启用了客户端输出缓存:
[OutputCache(OutputCacheLocation.Client, duration: 2 * 60)]
现在,有时(尤其是在演示中)我们的用户知道底层数据源已更改,他们希望刷新搜索以查看当前结果。
设置 LoadOperations LoadBehavior 没有刷新缓存。
现在我们有一个(部分)解决方案:我们为我们的服务添加了一个特殊的缓存计数器属性。该属性被服务忽略,仅用于解决缓存问题。每当用户单击搜索按钮时,缓存计数器就会增加,我们会绕过缓存。如果用户向后或向前导航到搜索页面,则从 Url 中检索搜索计数器,并由缓存处理请求。
现在的问题是:有没有更好的方法来强制刷新客户端缓存?
另外:如果用户选择浏览器刷新按钮来刷新搜索页面,我们的解决方法就会失败。在这种情况下,缓存计数器仍然是从 url 中获取的,并且数据是从缓存而不是服务器中检索的。我没有发现从我们的 silverlight 客户端检测刷新的方法(我看到一个建议使用服务器端会话变量,这不是一个选项,因为我们的服务器是完全无状态的)。
【问题讨论】:
标签: silverlight caching wcf-ria-services