Excel-VBA REST WCF在第一次调用时工作,但后续调用返回缓存(非当前)数据

时间:2012-07-23 21:25:46

标签: wcf rest excel-vba vba excel

我在下面的表单中有一个基本的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

2 个答案:

答案 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”-这样一来,它将在断开持久性方面强制建立新的连接。