3

私たちの Web アプリケーションでは、ユーザーは多くのデータベース テーブルを更新する必要がある変更を行うことができます。すべてのロード時間は最大 30 秒です。別のページに移動する前に、ユーザーがそれが完了するのを待たないようにします。

長時間実行されるコードを独自のページ (「updateinfo.aspx」など) に配置し、「updateinfo.aspx」への jQuery AJAX 呼び出しや「updateinfo.aspx」を呼び出す画像ファイルの読み込みなど、いくつかの解決策を試しました。 . いずれの場合も、「updateinfo.aspx」の実行中に、AJAX 呼び出しを開始した元の HTML ページから別の HTML ページに移動できません。Chrome は、「updateinfo.aspx」へのリクエストが保留中であると言います。リンクをクリックして元の HTML ページから移動すると、AJAX ページが終了するまで「example.org を待っています...」となります。その後、次の HTML ページに移動する要求が続き、新しいページが表示されます。ロードします。

したがって、これは実行時間の長いコードを AJAX ページに配置するという目的を無効にします。ユーザーのページはすばやくレンダリングされますが、AJAX ページが完了するまで、別のページに移動して 1 日を続けることはできません。AJAX ページの出力は気にしません。

何かご意見は?

4

1 に答える 1

1

Web ページのコンテキストで実行時間の長いプロセスを実際に実行するべきではありません。クライアント アプリケーションが Web ブラウザである場合、HTTP 要求/応答モデルはその概念に適していません。これは、私が何度も対処しなければならなかったシナリオです。あなたは出来る: -

  1. MSMQ を使用します。実行する操作の詳細を含むメッセージをキューに送信する、または
  2. 実行する操作の詳細を「Jobs」テーブルに書き込みます

次に、Windows サービスを作成して、キューからメッセージを読み取り、未処理のアイテムを一度に 1 つずつテーブルからプルし、長時間実行操作を実行できます。

私がこれをしなければならなかった最新のプロジェクトでは、メモリから、ジョブがいつ完了したかを検出するために15秒ごとにjQuery Ajaxを介してデータベーステーブルをポーリングするヘッダー(つまりマスターページ)にあるユーザーコントロールを作成しました。ジョブが終了したことを示すポップアップをユーザーに表示します。

どこかでいくつかの例を掘り下げることができますが、それらは主な可動部分です。それはまったく役に立ちますか?

于 2013-12-18T06:19:36.003 に答える