我有一个基本的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
从stackoverflow.com/q/11526810/190829,似乎添加了:httpReq.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
解决了我电脑上的问题(不知道它是否适用于所有使用不同浏览器的电脑)。其他2:CCD_ 2和HttpReq.setRequestHeader "Pragma", "no-cache"
似乎没有帮助。
我还尝试在URL中添加一个伪参数,该参数可以更改每个请求(如时间或随机数),这也有效。然而,我认为这将需要更改我所有操作的服务器代码。
我在使用GET调用资源和缓存响应时也遇到了类似的问题。我解决这个问题的方法是调用"PUT"(或任何其他不受支持的东西),然后调用有用的"GET"——这样它就会强制建立新的连接,从而切断持久性。