CreateObject(MSXML2.serverXMLHTTP.6.0) и CreateObject(WinHttp.WinHttpRequest.5.1) аварийно завершают работу при одновременном выполнении более 100 объектов/запросов

Я пытаюсь создать 100-300 объектов/запросов HTTP одновременно, используя MSXML2.serverXMLHTTP.6.0 или WinHttp.WinHttpRequest.5.1.

Эти запросы создаются в отдельных потоках с использованием тестового приложения. Все работает нормально, до 90 объектов/запросов на создание одновременно.

Когда одновременно создается/вызывается более 100, приложение аварийно завершает работу с исключением в KERNELBASE.dll.

Код:

CreateObject("MSXML2.serverXMLHTTP.6.0")
CreateObject("WinHttp.WinHttpRequest.5.1")

set obj = CreateObject("MSXML2.serverXMLHTTP.6.0")
'set obj = CreateObject("WinHttp.WinHttpRequest.5.1")

obj.open "GET", "https://httpbin.org/get", true
'https://resttesttest.com/

obj.send   ' Mostly crashes here.
obj.WaitForResponse

result =  obj.responseTEXT

set obj = Nothing

Отчет просмотра событий:

Имя сбойного модуля: KERNELBASE.dll, версия: 6.1.7601.18015, отметка времени: 0x50b83c8a Код исключения: 0xc00000fd Путь сбойного модуля: C:\Windows\syswow64\KERNELBASE.dll

Я попытался установить для Async значение «true» и установить значение «false».

Может ли кто-нибудь предоставить какие-либо указатели для отладки этого?


person DoIt    schedule 03.04.2017    source источник
comment
Мне не ясно, как именно ваш код демонстрирует проблему. Вы запускаете этот код 100 раз в каком-то внешнем цикле? Вы используете несколько копий вашего приложения? Вы делаете какие-то сумасшедшие вещи с потоками? Убедитесь, что вы предоставляете минимально воспроизводимый пример.   -  person    schedule 06.04.2017
comment
Что вы подразумеваете под этими запросами, созданными в отдельных потоках? Вы возитесь с ручной многопоточностью в VBA?   -  person GSerg    schedule 06.04.2017
comment
Я запускаю этот сценарий vb в многопоточном приложении VOIP. Это приложение имеет несколько голосовых каналов (которые могут запускать сценарии vb), запуск этого сценария на 90 каналах работает нормально. Сообщается о сбое с более чем 100 объектами. Скрипт не делает ничего, кроме отправки запроса и ожидания результата.   -  person DoIt    schedule 06.04.2017
comment
Скрипта vb нет, но, возможно, вы пытаетесь сказать VBScript? В этом случае это не VBA или VB6. Зачем так помечать? На самом деле это может быть VBA, но уж точно не VB6.   -  person Bob77    schedule 07.04.2017
comment
Я думаю, что вы нашли правильный форум для этой проблемы. 0xc00000fd — это код переполнения стека :). Это означает, что вы храните слишком много информации в стеке. Я бы проверил две вещи: (1) Использует ли ваша среда рекурсию в той или иной форме? (2) Сохраняет ли ваша среда данные, относящиеся к каждому экземпляру, в локальных переменных? Если это так, вам следует использовать меньше памяти в стеке (например, выполнять итерацию вместо рекурсии или использовать больше памяти в куче) или увеличить размер стека. Однако точный способ этого зависит от вашей среды, которую я еще не видел.   -  person z32a7ul    schedule 07.04.2017
comment
Я думаю, вам нужно высвободить некоторые ресурсы. Можете ли вы установить какую-то логику, чтобы сломаться, скажем, на 99? Например. objCount = objCount + 1, если objCount = 99 и т. д.?   -  person Absinthe    schedule 10.04.2017


Ответы (2)


Если вы делаете это, чтобы перегрузить свой REST-сервер и провести стресс-тестирование его объема/пропускной способности, я могу предложить вам создать несколько процессов, каждый со своим собственным пулом потоков (хотя я до сих пор не понимаю, как вам удалось создать свои собственные потоки с помощью VBScript).

person S Meaden    schedule 08.04.2017
comment
Я думаю, что ОП сказал, что приложение VOIP является многопоточным, и каждый поток запускает свой собственный VBScript. - person ThunderFrame; 12.04.2017

Если вы исчерпали другую возможную причину, я бы убедился, что с .dll все в порядке, вот инструмент восстановления системных файлов.

https://support.microsoft.com/en-us/help/929833/use-the-system-file-checker-tool-to-repair-missing-or-corrupted-system-files< /а>

Кроме того, я немного покопался в этой конкретной .dll, и большинство проблем с KERNALBASE.dll связаны с несовместимостью между 32- и 64-битными приложениями.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/2556a86b-f82e-4efb-bcdd-19919facbff6/application-error-faulting-имя-модуля-kernelbasedll-версия-61760016385?forum=vcgeneral

http://zahirkhan.com/dotnet/faulting-module-path-kernelbasedll

Я надеюсь, что это решит вашу проблему или, по крайней мере, поможет вам двигаться в правильном направлении.

person Dillon_Su    schedule 12.04.2017