2

従来の ASP ページから呼び出された長期実行 vb6 Com オブジェクトがあります。

やるべきことがあまりないときは完璧に機能しますが、やらなければならないことが多いとタイムアウトします。

タイムアウトしないように非同期で呼び出す方法はありますか

プログレス バーを呼び出してクライアントを更新し続け、タイムアウトしないようにすることはできますか?

Set objQReport = Server.CreateObject("ReportGenerator")

mainRpt = objQReport.GenerateReport(MySessionRef) ' times out here sometimes

Set objQReport = nothing

どんなヒントも役に立ちます

4

1 に答える 1

2

Web テクノロジは長時間実行されるタスクにはあまり適していませんが、いくつかのオプションがあります。

1 つのオプションは、2 番目の ASP ページに対して AJAX 呼び出しを行うことです。ASP が実行されるとすぐに、クライアント (実際の呼び出しを行ったブラウザー/AJAX) が接続されていなくても、サーバーはプロセスを終了します。

この方法では、Web テクノロジを使用して長時間実行されるタスクを処理します。欠点は、この長時間実行されるタスクを実行することで IIS マシンに負担がかかり、IIS が得意とするパフォーマンスが低下することです。ウェブページの提供。

したがって、ランディング ページ (default.asp など) で、(長時間実行される) レポート ページへの AJAX 呼び出しを実行します。ajax 呼び出しの実行方法は、使用する JavaScript ライブラリ (存在する場合) によって異なります。Jquery では、次のようになります。

    <script type="text/javascript">
    /* AJAX call to start the report generation */
     $(document).ready(function(){
            $.get("[URL_OF_YOUR_LONG_RUNNING_PROCESS]", function(data) 
                {
                    alert(data);
                });
     });
    </script>

ご覧のとおり、私はこの URL から返されたデータを警告していますが、あなたの場合、それはおそらくあなたが望むものではありません。長時間実行されるプロセスが機能している間、訪問者がブラウジングを続けられるようにします。

このように、URL は非同期的に呼び出されます。サーバーは URL の処理を​​開始し、ブラウザーはそれを待つ必要はありません。サーバーは続行し、バックグラウンドで実行時間の長いタスクを終了します。

長いプロセスを実行する ASP ページでserver.scripttimeout を増やす必要があることに注意してください。これにより、ユーザーがブラウジングを続行できるようになります。サーバーは、構成されている server.scripttimeout 設定を引き続き尊重し、時間がかかりすぎると失敗します。

広く使用されている 2 番目のオプションは、メッセージ キューを使用することです。メッセージ キューはメッセージを受け入れ、コンピューターまたはネットワークがダウンした場合でも、これらのメッセージの配信を保証します。

Microsoft Windows には MSMQ が組み込まれており (ソフトウェア設定で有効にする必要があります)、従来の ASP からこれを使用できます。キューはメッセージを保存し、それらをコンシューマーに配信します。コンシューマーは、自分で作成する必要があるものです。キューを読み取り、内部のメッセージを処理できるアプリケーション。

ここで行うことは、実行するタスクとそのパラメーターに関する情報を含むメッセージを ASP に MSMQ に書き込むことです。
コンシューマー アプリケーションは、MSMQ をポーリングし、メッセージを読み取り、実行時間の長いプロセスを開始する必要があります。これは、IIS から完全に独立して実行され、まったく別のコンピューターで実行することもできます (MSMQ はネットワーク間で実行できます)。

この 2 番目の方法の欠点は、おそらく VB や C# などのもう少し低レベルの言語で (たとえば Python を使用できる場合もありますが) コンシューマーを記述し、できればそれをサービスとして記述しなければならないことです。あなたがこれらの言語 (の 1 つ) にどれほど慣れているかはわかりませんが、COM オブジェクトを自分で作成した場合、MSMQ をポーリングして COM オブジェクトを呼び出す実行可能ファイルを VB6 で作成するのは簡単です。以下に、開始するためのリンクをいくつか示します。

http://support.microsoft.com/kb/173339

http://technosock.blogspot.nl/2007/07/microsoft-message-queue-from-classical.html

http://www.informit.com/articles/article.aspx?p=131272&seqNum=6

お役に立てれば、

エリック

于 2013-05-16T08:32:11.273 に答える