silverlight - WCF-RIA 服务客户端 OutputCache - 如何强制刷新缓存

标签 silverlight caching wcf-ria-services

another question 中所述我们在我们的项目中使用 WCF-RIA 服务并结合 silverlight 导航框架。部分是搜索功能。一个搜索按钮将导航到一个特殊的搜索页面,将搜索查询放在 url 中,然后将触发服务器上的 RIA 请求。

对于这个请求,我们使用这个属性启用了客户端输出缓存:

[OutputCache(OutputCacheLocation.Client, duration: 2 * 60)]

现在,有时(尤其是在演示中)我们的用户知道底层数据源已更改,他们希望刷新搜索以查看当前结果。

设置 LoadOperations LoadBehavior 不会刷新缓存。

现在我们有一个(部分)解决方案:我们为我们的服务添加了一个特殊的缓存计数器属性。该属性被服务忽略,仅用于解决缓存问题。每当用户单击搜索按钮时,缓存计数器就会增加,我们会绕过缓存。如果用户向后或向前导航到搜索页面,则从 Url 检索搜索计数器,并由缓存处理请求。

现在的问题是:有没有更好的方法来强制刷新客户端缓存?

此外:如果用户选择浏览器刷新按钮来刷新搜索页面,我们的解决方法将失败。在这种情况下,缓存计数器仍然是从 url 中获取的,并且数据是从缓存而不是服务器中检索的。我没有发现从我们的 silverlight 客户端检测刷新的方法(我看到了一个使用服务器端 session 变量的建议,这不是一个选项,因为我们的服务器是完全无状态的)。

最佳答案

我们遇到了完全相同的问题,所以相反,我们在所有“Get”方法中声明了一个名为 version 的通用参数,而 version 是在 silverlight 应用程序启动时选择的随机数。单击刷新按钮时,会更改版本并刷新缓存。当用户单击浏览器上的刷新按钮时,silverlight 将重新启动并选择一个新的随机版本。并且对于每个后续的下一个/上一个版本变量将保持不变。

样本:

public IQueryable<Products> GetProducts(
    string name, 
    // ignore following
    int version )
{
   Return ....
}

基本上不同的版本号标识不同的 URL,因此浏览器或 http 客户端会忽略缓存并刷新结果。

关于silverlight - WCF-RIA 服务客户端 OutputCache - 如何强制刷新缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7092829/

相关文章:

linq - 如何在 LightSwitch 查询中使用计算字段?

c# - 如何使用 C# 在字符串中显示符号?

wpf - Silverlight MVVM 框架

c# - Silverlight 单元测试

HTML 5 - 使用本地主机测试离线缓存

javascript - 我可以告诉 Web 浏览器不要缓存特定文件吗?

node.js - Node 缓存未按预期触发 "on expired"回调

silverlight-4.0 - 错误 404 - Silverlight RIA 服务调用中未找到文件

c# - 从 OnLostFocus 事件中设置焦点 c# silverlight 组件一个屏蔽文本框

vb.net - .Net Silverlight WCF RIA 查询项目计数