7

要点は次のとおりです。

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

これは、同期的に呼び出すとうまく機能しますが、非同期オプションを「true」に切り替えると、何も起動しません。インターネットから収集できるのは、ユーザーが次のようなことをしていることです。

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

応答を待っている場合でも、これはもはや非同期呼び出しのようには見えないという点で、私は気が狂っていますか?

送信の直後に行を置くxmlhttp.waitForResponse 1と、リクエストが発生しますが、もう一度待ちたくありません。

何かご意見は?

4

4 に答える 4

13

今日、同じ問題が発生しました。「Microsoft.XMLHTTP」オブジェクトを使用して解決しました。

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

そして今、リクエストは非同期に送信され、ターゲット URL がヒットしました。それが役立つことを願っています。

于 2010-08-16T15:37:15.047 に答える
7

ここでの重要な問題は、待機せずにスクリプトが終了すると、ServerXMLHTTP コンポーネントがそれ自体を破棄し、その過程で未処理の要求を中止することです。その時点でリクエストがどこに到達したかを保証する方法はありません。

たとえば、サーバーが宛先サーバーに発行する準備が整っていない場合、サーバーは不要であり、気にしないことがわかります。

宛先サーバーへの接続が確立されていても、要求がまだハンドラーに渡されていない可能性があります。多くの場合、Web サーバーは、要求を満たすためにリソースをコミットする前に、クライアントがまだ接続されていることを確認します。接続が切断されていることがわかった場合は、リクエストを完了する必要はありません。

つまり、従来の ASP では、この操作を非同期で実行する信頼できる方法はありません。そのようなことを処理するようには設計されていません。あなたが得ることができる最善の方法は、スクリプトが何か他のことをしている間に他のことをすることです (あなたが何か他のことをしなければならない場合)。

于 2009-10-02T20:51:30.733 に答える
3

非同期 XMLRequest を使用して、ASP サイトの Fogbugz にエラーを記録します。これは唯一のエラー レポートであるため、ユーザーがコードの終了を待ってぶらぶらしたくないので、非同期にします。これは、構成ファイルの欠落、DB のタイムアウト、どこかの構成ファイルのルックアップの欠落など、あらゆることが原因である可能性があります。常にミッション クリティカルなものではありませんが、知っておくとよいでしょう。そのような場合、非同期はうまく機能します。そうでない場合、それは私たちにとって世界の終わりではありませんが、問題はありませんでした. 作成して別の質問に投稿したこのスクリプトを使用しています。

古典的なASPのSystem.Net.HttpWebRequest?

Anthony が言うように、100% 保証されているわけではありません。可能な修正として、Response.Buffer = true を挿入し、すべての出力をユーザーにレンダリングし、Response.Flush を呼び出してから、waitForResponse 呼び出しを実行することができます。ユーザーはページ全体を表示し、停止することなく操作できるようになり、非同期呼び出しが完了するまでにもう少し時間がかかります。

于 2009-10-05T10:23:05.727 に答える
2

ServerXMLHTTP オブジェクトを引き続き使用する場合の別のオプション (前述の Anton によるクライアント側コンポーネントではなく、http://support.microsoft.com/kb/290761の FAQ #4 を参照) は、VBScript クラスを作成することです。クラスをインスタンス化します。クラスのプロパティを HTTP オブジェクトに設定します。次に、リクエストを開始するメソッドを呼び出します。

クラス インスタンスを破棄しないでください。ASP ページが終了すると自動的に破棄されます。クラス破棄メソッドで HTTP オブジェクトを解放します。これにより、破棄される前にリクエストを開始するのに十分な時間が与えられます。

于 2011-02-22T23:21:35.247 に答える