如何在asp classic中触发异步调用并忽略响应?

7 asynchronous serverxmlhttp asp-classic

这是要点:

我打算用asp打电话,我不关心响应.我只想发起呼叫,我不希望页面等待响应.根据文档,它应该看起来像这样:

dim xmlhttp : set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "POST", url, true '' setting the 'asynchronous' option to 'true'
xmlhttp.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
xmlhttp.setRequestHeader "Content-Length", Len(XMLData)
xmlhttp.send XMLData
Run Code Online (Sandbox Code Playgroud)

这在同步调用时很有效,但当我将ansynchronous选项翻转为'true'时,什么都不会触发.我可以从互联网上收集到的是用户执行以下操作:

While xmlhttp.readyState <> 4
    xmlhttp.waitForResponse 1000
Wend
Run Code Online (Sandbox Code Playgroud)

如果你在等待回应,我是否真的疯了似乎不再是异步电话?

xmlhttp.waitForResponse 1在发送之后将该行放置正确将导致请求触发,但同样,我不想等待一秒钟.

有什么想法吗?

Ant*_*yok 13

今天我遇到了同样的问题.我通过使用"Microsoft.XMLHTTP"对象解决了它.

dim xmlhttp 
set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "POST", url, true 
xmlhttp.Send ""
Run Code Online (Sandbox Code Playgroud)

现在,请求以异步方式发送,目标URL被命中.希望有所帮助.


Ant*_*nes 7

这里的关键问题是,如果您不等待并且脚本结束,则ServerXMLHTTP组件会自行销毁,并在此过程中中止未完成的请求.您无法保证当时请求的位置.

例如,如果您的服务器没有轮到发送到目标服务器,它将看到它不再需要而不是麻烦.

即使已与目标服务器建立连接,也可能尚未向处理程序提供请求.在提交资源以完成请求之前,Web服务器通常会检查客户端是否仍处于连接状态.如果它看到您的连接已被删除,则无需完成请求.

换句话说,没有可靠的方法在经典ASP中异步执行此操作,它只是不是为处理那种事情而设计的.你可以获得的最好的是在你的脚本继续使用别的东西时做其他事情(如果你还有其他东西可以使用),但是,我甚至不建议这样,因为ASP中的异步WinHTTP是不稳定的.