Wie kann ich Feuer einen asynchronen Aufruf in asp classic und ignorieren Sie die Antwort?
Hier ist der Kern:
Habe ich einen Anruf ich möchte in asp, und ich kümmern sich nicht über die Antwort. Ich will einfach nur, um das Feuer der Anruf und ich möchte nicht die Seite, die Antwort zu warten. Laut Dokumentation, sollte es wie folgt Aussehen:
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
Dies funktioniert peachy beim Aufruf synchron, aber wenn ich flip ansynchronous option "wahr", nichts feuert. Was kann ich sammeln aus dem internet ist, dass die Benutzer etwas wie die folgende:
While xmlhttp.readyState <> 4
xmlhttp.waitForResponse 1000
Wend
Bin ich verrückt, dass dies nicht wirklich scheinen, wie eine asynchrous mehr anrufen, obwohl, wenn Sie auf eine Antwort warten?
setzen die Linie xmlhttp.waitForResponse 1
direkt nach dem senden wird die Ursache der Anfrage zu Schießen, aber wieder, ich will nicht warten Sie eine Sekunde.
Irgendwelche Gedanken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Heute hab ich das gleiche Problem.
Ich habe es behoben, indem Sie "Microsoft.XMLHTTP" - Objekt.
Und jetzt die Anfrage asynchron-und Ziel-URL getroffen wurde.
Hoffe, das hilft.
Das zentrale problem ist hier, wenn Sie nicht warten, und das Skript endet mit der Komponente ServerXMLHTTP sich selbst zerstört und in den Prozess bricht die herausragende Anforderung. Es gibt keine Möglichkeit für Sie zu garantieren, wenn der Antrag hat zu damals.
Zum Beispiel, wenn Ihr server nicht rund um die Vergabe der Ziel-server wird es sehen, dass seine nicht mehr benötigt und stört nicht weiter.
Selbst wenn eine Verbindung zum Ziel-server die Anfrage nicht noch gegeben worden ist, zu einem handler. Oft wird ein web-server überprüfen, ob der client noch verbunden, bevor Sie Ressourcen, die zur Erfüllung einer Anforderung. Wenn es sieht, dass Ihre Verbindung wurde abgebrochen, es wird nicht stören Abschluss der Anfrage.
In anderen Worten, es gibt keinen zuverlässigen Weg, um diesen Vorgang auszuführen asychronously in classic ASP, es ist einfach nicht darauf ausgelegt, diese Art der Sache. Das beste, was man tun andere Sachen, während Ihr Skript bekommt mit etwas anderem (wenn du hast etwas anderes vor), allerdings würde ich auch nicht empfehlen, da asynchrone WinHTTP-innen ASP unzuverlässig ist.
Wir verwenden async XMLRequest, um Fehler zu protokollieren in Fogbugz in unsere ASP-Seiten. Als Ihr auch nur einen Fehler melden, die wir nicht wollen, dass unsere Nutzer hängen herum und warten auf unseren code zu beenden, so dass wir es tun async. Dies kann alles von einer fehlenden config-Datei, DB-timeout, fehlende Suche in einer config-Datei irgendwo, etc. Nicht immer mission crytical Zeug, aber gut zu wissen. In diesen Fällen wird die async arbeitet ein Genuss und wenn nicht, dann ist nicht das Ende der Welt für uns, aber wir haben keine Probleme gehabt mit ihm. Wir haben mit diesem Skript, welches wir erstellen und geschrieben in einer anderen Frage:
System.Net.HttpWebRequest-in classic asp?
Wie Anthony sagt, wenn Ihr nicht 100% guanenteed durch zu kommen. Als mögliche Lösung könnte man sert Antwort.Buffer = true, wird die Wiedergabe alle Ihre Ausgabe an den Benutzer -, Anruf-Antwort.Flush und dann eine waitForResponse nennen. Der Benutzer sieht die gesamte Seite und in der Lage sein, mit ihm zu interagieren, ohne halten, und es gibt Ihrer asynchronen Aufruf ein bisschen mehr Zeit, um fertig zu stellen.
Weitere option, wenn Sie immer noch wollen, verwenden Sie das ServerXMLHTTP-Objekt (und nicht die client-Komponente auf Seite des oben erwähnten, durch Anton finden Sie unter FAQ #4 bei http://support.microsoft.com/kb/290761) ist das erstellen einer VBScript-Klasse. Die Klasse instanziieren. Festlegen einer Eigenschaft der Klasse, die HTTP-Objekt. Dann rufen Sie eine Methode, um Feuer aus der Anfrage.
Nicht immer zerstören die Klasse-Instanz - es wird automatisch zerstört, wenn die ASP-Seite beendet. Die Klasse Zerstörung Verfahren frei, die HTTP-Objekt - das soll es geben genug Zeit, um das Feuer aus der Anforderung, bevor es zerstört wird.