2009-10-02 103 views
7

ここに要点があります: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 

を同期的に呼び出すときにこれは桃の作品が、私は「真」、何も火災にansynchronousオプションを反転するとき。私は、インターネットから収集することができ、ユーザーは、次のような何かをということです:あなたは、応答を待っている場合

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

私はそれで狂ったアムこれは本当にもうかかわらasynchrous呼び出しのように見えるしていませんか?

送信直後に、xmlhttp.waitForResponse 1を送信すると、リクエストが発生しますが、もう一度、私は1秒待たないでください。

どのような考えですか?

答えて

7

ここで重要な問題は、待たずにスクリプトが終了してServerXMLHTTPコンポーネントが破棄され、処理中に未処理の要求が異常終了する場合です。その時点で要求がどこにあるのかを保証する方法はありません。

たとえば、サーバーが送信先サーバーに発行するラウンドに達していない場合、サーバーは不要になったことがわかり、気にする必要はありません。

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

つまり、古典的なASPでこの操作を非同期的に実行する信頼できる方法はありません。そのようなことを処理するようには設計されていません。あなたが得ることができる最高のものは、あなたのスクリプトが何か他のものを取得している間に他のものを行うことです(ただし、何か他のものが加わっている場合)。ASP内の非同期WinHTTPが不安定であるため、

3

async XMLRequestを使用して、ASPサイトのFogbugzにエラーを記録します。唯一のエラー報告として、ユーザーがコードを終了するのを待っていないように、私たちは非同期にします。これは、設定ファイルが見つからない、DBタイムアウト、どこかの設定ファイルのルックアップが見つからなかったことなど、何らかの理由がある可能性があります。そのような場合には、非同期が扱いますが、そうでない場合は、私たちにとっては世界の終わりではありませんが、問題はありません。そのない100%guanenteedを介して取得するのに

System.Net.HttpWebRequest in classic asp?

ようアンソニーは言う:私たちは別の質問で作成し、掲示、このスクリプトを使用してきました。 Response.Buffer = trueを設定し、すべての出力をユーザーにレンダリングし、Response.Flushを呼び出してからwaitForResponse呼び出しを実行することで、修正可能です。ユーザーはページ全体を見ることができ、ホールドアップすることなくページ全体を操作することができ、非同期呼び出しにもう少し時間をかけて終了することができます。

12

今日私は同じ問題を抱えていました。 "Microsoft.XMLHTTP"オブジェクトを使用して解決しました。

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

これで、要求は非同期で送信され、ターゲットURLがヒットしました。 希望に役立ちます。

+0

優良 - ありがとう! – EdenMachine

+0

あなたはちょうどキーボードからあなたの頭を叩くことによって死から私を救った。これは "MSXML2.ServerXMLHTTP"のための直接交換(リファクタリングが必要ないのでしょうか?)ですが、私は回帰分析を実行して確認しています。 – jerhewet

2

さらに、ServerXMLHTTPオブジェクトを使用したい場合(Antonが上に挙げたFAQs#4のhttp://support.microsoft.com/kb/290761ではない)、VBScriptクラスを作成することもできます。クラスをインスタンス化します。クラスのプロパティをHTTPオブジェクトに設定します。その後、リクエストを起動するメソッドを呼び出します。

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

関連する問題