2

我有一个基本的 WCF 客户端服务,格式如下。第一次调用它时,它会从远程服务器返回正确的数据。但是数据经常变化。在随后的调用中,它返回与第一次调用相同的数据。因此,Excel 似乎返回缓存数据。
如果我从 Fiddler 或浏览器运行相同的 WCF 过程,它似乎总是返回当前/刷新的数据(所以我认为问题出在 Excel 中,而不是服务器中)。如何强制 Excel VBA “刷新”调用而不是从缓存中获取数据?注意:这将分发给各种最终用户,因此我无法更改客户端配置。

Public Function CallWCF() As String
   Dim HttpReq As Object
   Set HttpReq = CreateObject("MSXML2.XMLHTTP")
   HttpReq.Open "GET", "http://ws.mydomain.com/Rest.svc/getmydata"
   Call HttpReq.Send
   Do While HttpReq.readyState <> 4
     DoEvents
   Loop
   Dim resp As String
   resp = HttpReq.ResponseText
   CallWCF = resp
   Set HttpReq = Nothing
End Function
4

2 回答 2

3

stackoverflow.com/q/11526810/190829看来,添加: httpReq.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" 解决了我的 PC 上的问题(不知道它是否适用于具有不同浏览器的所有 PC)。另一个2: HttpReq.setRequestHeader "Cache-Control", "no-cache"似乎 HttpReq.setRequestHeader "Pragma", "no-cache" 没有帮助。

我还尝试在 URL 中附加一个可以更改每个请求(例如时间或随机数)的虚拟参数,这也可以。但是我认为这将需要更改我所有操作的服务器代码。

于 2012-07-25T00:47:37.793 回答
0

我在使用 GET 调用资源并缓存响应时遇到了类似的问题。我解决它的方法是调用“PUT”(或任何其他不受支持的东西),然后调用有用的“GET” - 这样它将强制建立新的连接,从而切断持久性。

于 2019-07-05T19:00:51.510 回答