我在下面的表单中有一个基本的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
答案 0 :(得分:2)
从stackoverflow.com/q/11526810/190829开始,添加:
httpReq.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
解决了我的电脑上的问题(不知道它是否适用于所有使用不同浏览器的电脑)。另外2:
HttpReq.setRequestHeader "Cache-Control", "no-cache"
和
HttpReq.setRequestHeader "Pragma", "no-cache"
似乎没有帮助。
我还尝试使用伪参数附加URL来更改每个请求(例如时间或随机数),这也有效。但是我认为它需要更改我所有操作的服务器代码。
答案 1 :(得分:0)
在使用GET调用资源并缓存响应时,我遇到了类似的问题。我解决它的方式是调用“ PUT”(或任何其他不受支持的内容),然后调用您有用的“ GET”-这样一来,它将在断开持久性方面强制建立新的连接。