VBA Несколько запросов WinHTTP Aysnc в одном и том же Sub

Что мне нужно

  • Возможность несколько раз попасть в конечную точку на моем веб-сервере за один вызов моей подпрограммы
  • Каждый http-вызов выполняется асинхронно.
  • Каждый http-вызов выполняется без кэширования/обходных путей очистки кеша, которые заполняют мой кеш.
  • Каждый HTTP-вызов не замедляется намного по сравнению с обычным HTTP-вызовом.

Что я пробовал

Учитывая проблемы кэширования с MSXML2.XMLHTTP60 и проблемы с MSXML2.ServerXMLHTTP в корпоративных сетях, я использую WinHttp.WinHttpRequest.5.1.

У меня есть этот код:

Sub winhttp_test()
    Dim http As Object
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")

    http.Open "GET", "http://localhost:6969/test/winhttp_1", True
    http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    http.setRequestHeader "Cache-Control", "max-age=0"
    http.send

    'Set http = CreateObject("WinHttp.WinHttpRequest.5.1")

    http.Open "GET", "http://localhost:6969/test/winhttp_2", True
    http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    http.setRequestHeader "Cache-Control", "max-age=0"
    http.send
    MsgBox "done"
End Sub

Мой сервер никогда не увидит первый запрос (даже если я раскомментирую закомментированную строку).
Если я уберу вызов MsgBox, мой сервер не увидит ни одного запроса. Это похоже на то, что отправка не будет работать, если объект будет уничтожен сразу после вызова.

Если я использую ServerXMLHTTP на машине без проблем с сетью, я получаю ту же проблему.

(примечание: /test - это путь к конечной точке. Таким образом, оба вызова попадают в одну и ту же конечную точку, но с другим параметром URL-адреса. Вместо этого я пытался использовать параметры GET и POST, но проблема остается той же).

Как добиться нужного мне поведения?


person Griffin    schedule 22.03.2021    source источник
comment
stagesolutions.wordpress.com/2012/04 /18/   -  person Tim Williams    schedule 22.03.2021