Как отправить запрос из XMLHTTP, не дожидаясь ответа? - PullRequest
1 голос
/ 20 января 2012
pXML= Product_Request
set http= server.Createobject("MSXML2.ServerXMLHTTP")
http.Open "GET", "http://test.com/Data_Check/Request.asp?XML_File=" & pXML , False
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.send

Мне нужно отправить запрос с вышеуказанным кодом asp для вышеуказанного URL. Но мне не нужен ответ от этого сервера.

После отправки запроса он ожидает ответа. Как мне написать это, чтобы оно не блокировалось во время ожидания ответа?

Ответы [ 3 ]

1 голос
/ 20 января 2012

Вместо этого вы можете использовать объект WinHTTPRequest напрямую (именно это лежит в основе ServerXMLHTTP).У него есть дополнительный метод, который может быть полезен для метода WaitForResponse.

 Set winHttpRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 
 winHttpRequest.Open "GET", "http://localhost/mypage.aspx", true

 winHttpRequest.Send

 ''# Do other request normally here

 winHttpRequest.WaitForResponse()

Обратите внимание, что метод Open имеет true для своего параметра async.В этом случае Send вернется, как только запрос будет отправлен, но до того, как будет получен какой-либо ответ.Теперь вы можете делать другие вещи, такие как сделать другой запрос в обычном синхронном режиме.Сделав это, вы можете убедиться, что первоначальный запрос был выполнен, вызвав WaitForResponse.

CAVEATs

  • Я никогда не делал этого в ASP напрямуюсуществует вероятность того, что вызов Open может жаловаться на то, что среда сценариев не "выполняет асинхронные вызовы".
  • С вашей стороны есть предположение, что можно делать два запроса одновременновремя.Если они относятся к двум разным серверам, то это будет хорошо, если не все еще возможно нормально, но могут быть и другие сложности.
  • Вы делаете запросы к странице ASP, каждый запрос создает новый сеанс на этом сервере, просто кое-что, о чем нужно знать.
  • С моей стороны есть предположение, что вы не обращаетесь к тому же серверу, на котором работает ваш код, если вы таковы, вы можете пойти на мертвую блокировку пула потоков.
0 голосов
/ 21 января 2012

Измените ваш запрос на открытие на асинхронный (т. Е. 3-й параметр на True).Это позволит вам подать два запроса одновременно.Тогда вы получите ожидание получения обоих ответов.

pXML = Product_Request
Set http = server.Createobject("MSXML2.ServerXMLHTTP")
http.Open "GET", "http://test.com/Data_Check/Request.asp?XML_File=" & pXML , True
http.Send
Set http2 = server.Createobject("MSXML2.ServerXMLHTTP")
http2.Open "GET", insert_code_for_your_second_url_here , True
http2.Send
http1.WaitForResponse
http2.WaitForResponse
0 голосов
/ 20 января 2012

Я не верю, что есть способ определить, что ваш запрос был успешным без ответа. Так что же определить разницу между отсутствием ответа и полным отказом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...