En primer lugar, una explicación general de lo que ocurre y, a continuación, dos formas de enfocar (y resolver) el problema.
Como el método Send() se ejecuta de forma sincrónica, la instancia MSXML esperará una respuesta del servidor hasta que esté disponible.
Cuando el volumen de datos es muy grande, el servidor tarda mucho tiempo en procesar la información y, como resultado, MSXML no recibe una respuesta en el tiempo que tiene asignado para esperarla.
En esta circunstancia, cuando el servidor finalmente termina de procesar y devuelve el resultado, MSXML ya no está a la escucha. El procesamiento finaliza (incluso con éxito), pero el mensaje de finalización que el servidor devuelve al cliente se pierde.
La forma más sencilla de resolver el problema es aumentar los tiempos de espera de MSXML. Para ello, antes deHTTP.open(), ejecuteHTTP.setTimeouts(<tiempo de resolución>, <tiempo de conexión>, <tiempo de envío>, <tiempo de recepción>). El más crítico es el tiempo de recepción, que debe aumentarse (por defecto es de 30 segundos). Tenga en cuenta que todos los tiempos se indican en milisegundos. Así, para aumentar el tiempo de recepción a 5 minutos, por ejemplo, se estipularía 5 * 60 * 1000.
El problema de esta solución es que el sistema se colgará mientras no se reciba el mensaje de finalización.
Una forma más interesante sería hacer la transacción asíncrona. En otras palabras, los datos se envían pero el servicio HTTP regresa inmediatamente, señalando el evento de finalización más tarde.
Desafortunadamente, MSXML no expone eventos relacionados con el intercambio de mensajes, por lo que sería necesario utilizar otra clase para soportar el envío asíncrono. Los objetos WinHTTPRequest proporcionan este soporte.
Consulte esta discusión en
https://www.tek-tips.com/viewthread.cfm?qid=1828591 para ver un ejemplo de una implementación muy sencilla pero totalmente funcional que demuestra la capacidad de respuesta del sistema incluso cuando se ejecutan llamadas HTTP.
(traducción DeepL)