如何在不等待响应的情况下从XMLHTTP发送请求?

时间:2012-01-20 15:14:09

标签: asp-classic

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代码发送请求。但我不需要该服务器的响应。

发送请求后,它会等待响应。 如何编写此代码以便在等待响应时不会阻塞?

3 个答案:

答案 0 :(得分:1)

您可以直接使用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确保原始请求已完成。

<强>警告

  • 我从来没有直接在ASP中完成此操作,对Open的调用可能会抱怨脚本环境不“异步调用”。
  • 您可以假设可以同时发出两个请求。如果他们是两个不同的服务器,那么这将是好的,如果不是它仍然可能很好,但可能有其他复杂性。
  • 您正在向ASP页面发出请求,每个请求都会在该服务器上创建一个新会话,这只是需要注意的事项。
  • 我假设您没有调用运行代码的服务器,如果您是,那么您可能会前往线程池死锁。

答案 1 :(得分:0)

我不相信有一种方法可以确定您的请求在没有响应的情况下成功。那么,确定无响应和完全失败之间的区别是什么?

答案 2 :(得分:0)

将您的Open请求更改为Asynchronous(即第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