如何在火灾ASP经典的异步调用,而忽略了响应?(How do I fire an asynchron

2019-07-20 14:38发布

这里的要点是:

我有一个电话我想在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

打电话时同步,但是当我翻转ansynchronous选项设置为“真”,没有什么触发这工作桃色。 我可以从互联网上收集的用户做类似如下:

While xmlhttp.readyState <> 4
    xmlhttp.waitForResponse 1000
Wend

我疯了的,这并不真的看起来像一个asynchrous调用了但如果你正在等待一个回应?

把线xmlhttp.waitForResponse 1发送后立即会引起火灾的要求,但同样,我不想等待一秒钟。

有什么想法吗?

Answer 1:

今天,我得到了同样的问题。 我使用“Microsoft.XMLHTTP”对象解决它。

dim xmlhttp 
set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "POST", url, true 
xmlhttp.Send ""

而现在的要求是同步发送和目标地址被击中。 希望帮助。



Answer 2:

这里的关键问题是,如果你不等待,你的脚本结束ServerXMLHTTP组件破坏自己,在这个过程中止未完成的请求。 有没有办法让你保证,其中请求在那个时候得到了。

例如,如果您的服务器还没有得到全面发放到目标服务器就会看到它不再需要,不打扰。

即使连接已到目标服务器的请求可能还没有被赋予的处理程序。 通常,一个Web服务器会检查客户端提交的资源来履行请求之前仍连接。 如果它看到你的连接已断开它不会打扰完成请求。

换句话说存在于传统的ASP异步地执行该操作没有可靠的方法,它只是不设计来处理之类的事情。 你可以得到的最好的是做其他的东西,而你的脚本变得与其他东西(如果你有别的是越来越上),但是,我不会建议,因为里面ASP异步WinHTTP的是片状。



Answer 3:

我们使用异步XMLRequest登录我们的网站ASP错误到FogBugz的。 作为其唯一的错误报告,我们不希望我们的用户挂在等待着我们的代码来完成,所以我们做异步。 这可能是从一个丢失的配置文件,DB超时什么,在配置文件中查找丢失的地方,等不总是使命crytical的东西,但良好的了解。 在这种情况下异步工作的享受,如果不是那么它不是世界对我们的结束,但我们已经没有任何问题,它。 我们一直在使用这个脚本,我们创造并张贴在另一个问题:

在传统的ASP System.Net.HttpWebRequest?

像安东尼说,虽然它不是100%guanenteed打通。 作为一个可能的修复,你可以塞尔特将Response.Buffer = TRUE,呈现出所有的输出给用户,调用Response.Flush然后做一个waitForResponse的电话。 用户将看到整个网页,并能没有任何撑起与它进行交互,它给你的异步调用多一点的时间来完成。



Answer 4:

如果你仍然想使用ServerXMLHTTP对象(而不是由安东看FAQ#4,在上面提到的客户端组件的另一个选项http://support.microsoft.com/kb/290761 )是创建一个VBScript类。 实例化类。 类的属性设置为HTTP对象。 然后调用一个方法来火了这个请求。

永远不要破坏类的实例 - 它会在ASP页面完成自动销毁。 有一流的销毁方法释放HTTP对象 - 这应该给它足够的时间它被摧毁之前,断火的请求。



文章来源: How do I fire an asynchronous call in asp classic and ignore the response?