代码之家  ›  专栏  ›  技术社区  ›  Quentamia

Silverlight缓存web服务调用吗?

  •  1
  • Quentamia  · 技术社区  · 14 年前

    问题是:

    我的Silverlight应用程序正在使用WebClient调用一个httpweb服务,名为getCampaigns,它返回一个针对活动对象的JSON数据数组。然后,用户可以与请求的对象交互、修改它们、删除它们等等。当用户删除活动时,Silverlight调用另一个web服务,该服务在数据库中标记该对象,以便将来不会返回该对象,然后通过调用getCampaigns刷新页面。问题是被删除的活动仍然出现。

    有什么想法吗?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Keith Adler    13 年前

    Silverlight中的任何httpget请求都倾向于缓存,因此如果希望消除客户端浏览器的缓存,请使用httppost进行web服务调用。例如,在WCF RIA域服务中,将调用和查询方法标记为:

    [Invoke(HasSideEffects = true)]
    [Query(HasSideEffects = true)]
    

    HasSideEffects简单地说,它应该使用POST方法来避免客户端GET的缓存机制。记住,默认情况下,SL使用浏览器进行web服务调用,默认情况下使用可缓存的GET。这就是为什么您对RIA之外的服务的web服务调用被缓存的原因:浏览器看到您使用httpget并缓存结果。

    对于web服务调用,默认情况下使用GET是出于性能原因,因为根据RFC 2616,所有主要浏览器都无法缓存POST响应,RFC 2616规定POST应该是一个幂等操作(aka总是导致一个预期的结果,缓存会中断,因为结果可能会随时间而改变)。

    RIA中的其他操作涉及通过在LoadOperations上使用LoadBehavior来设置缓存。

        2
  •  0
  •   Spilarix    14 年前

    没有web服务调用的缓存。 您的刷新方法可能有问题。

        3
  •  0
  •   Quentamia    14 年前

    https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=340931&wa=wsignin1.0

    给出了两种解决方法。我将一个Guid附加到我的Url,因此每个web服务调用都使用一个唯一的Url来完成。

        4
  •  0
  •   Fernando    14 年前

    这是一个旧线程,但我会插话,以防万一有人遇到同样的问题。 一个解决方法是,如果您有权访问用户的浏览器,则为每个页面请求设置do refresh缓存。 希望它能帮助别人