Silverlight是否缓存Web服务调用?

时间:2010-10-04 16:52:58

标签: web-services json caching silverlight-4.0

以下是问题:

我的Silverlight应用程序正在调用HTTP Web服务,使用名为getCampaigns的WebClient,它返回Campaign对象的JSON数据数组。然后,用户可以与请求的对象进行交互,修改它们,删除它们等。当用户删除一个活动时,Silverlight会调用另一个Web服务,该服务会标记数据库中的对象,以便将来不会返回该对象,并且然后通过调用getCampaigns刷新页面。问题是删除的广告系列仍然显示出来。

如果我检查数据库,该广告系列确实已被禁用,如果我关闭Silverlight应用程序并重新启动它,则不会显示该广告系列。似乎Silverlight正在缓存Web服务调用。但每次调用时都会实例化一个新的WebClient对象。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

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

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

HasSideEffects只是声明它应该使用POST方法来避免客户端GET的缓存机制。请记住SL默认使用浏览器进行Web服务调用,默认情况下使用可缓存的GET。这就是为什么你的Web服务调用甚至在RIA之外的服务都被缓存:浏览器​​看到你使用HTTP GET并缓存结果。

默认情况下,对于Web服务调用使用GET是出于性能原因,因为根据RFC 2616,所有主要浏览器都无法进行POST响应,这表明POST应该是幂等操作(也总是会产生缓存会中断的预期结果)因为结果可能随时间而变化。)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

给出了两个解决方法。我正在将Guid附加到我的网址,因此每个网络服务电话都使用唯一的网址完成。

答案 3 :(得分:0)

这是一个老线程,但我会报复,以防有人遇到同样的问题。 解决方法是,如果您有权访问用户的浏览器,则设置为每个页面请求刷新缓存。 您可以通过进入IE的Internet选项(IE 8),然后在“常规”选项卡中进入“浏览历史记录设置”按钮并选择“每次访问该网页” 希望它可以帮助某人