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 に答える