1

製品情報を更新する長いプロセスを開始するdllを呼び出すasp.netページがあります。プロセスの実行中に、そのプロセスがオンになっている製品と製品のステータスに関する最新情報をユーザーに提供したいと思います。私はこれを機能させるのに苦労してきました。ログテキストファイルに情報を追加し、新しいページにリダイレクトして、そのページにJavascriptを使用して数秒ごとにテキストファイルから読み取るようにしようと考えていました。私の質問は、他の誰かがこれを試したことがあり、それはかなりうまく機能するかどうかです。

4

3 に答える 3

2

私はAjaxを使用し、そのテキストファイルをポーリングして更新を確認します。

于 2010-03-07T18:26:42.800 に答える
0
  • 進行状況に関する状態 (ステータス、最後に処理された製品など) を更新するように、長いプロセスを作成します。
  • 開始したら、ASP.NET 側でリソースを節約するために、処理された 50 番目のアイテムごとに進行状況を更新することをお勧めします (そうでない場合もありますが、必要なものによって異なります)。
  • 処理が現在のセッションに関連付けられている場合は、状態をセッションに入れることができます。グローバルでない場合は、何らかのグローバル状態にします。
  • 次に、JSON などを使用して JavaScript から Ajax を介して時々状態をポーリングし、それに応じて UI を更新します。
  • 共有状態にアクセスするときは、適切なロックを使用していることを確認してください。
  • また、状態を小さく保つようにしてください (js GUI のデータを取得するために絶対に必要なものだけを保存してください)。
于 2010-03-07T18:47:50.330 に答える
0

ステータスをテキスト ベースのログ ファイルに出力するのではなく (または、ログ ファイルの使用に加えて、両方を使用することもできます)、ステータスをデータベース テーブルに出力できます。たとえば、テーブルを次のように構成します。

Queue:
  id (Primary Key)
  user_id (Foreign Key)
  product_id (Foreign Key) //if available
  batch_size //total set of products in the batch this message was generated from
  batch_remaining //number remaining in this batch
  message

これでキューができました。ユーザーが特定のページに移動すると、次の 2 つのいずれかを行うことができます。

  1. 関連するデータをキューから取得し、ヘッダーに表示します。これは、ページが更新されるたびに更新されます。
  2. Web サービスをポーリングして一定間隔でデータを取得する AJAX ハンドラーを作成します。これにより、ユーザーが更新せずに同じページにいる場合でも、15 秒または 20 秒ごとにステータスを更新できます。

送信後にキューから行を削除できます。または、そのデータを保持したい場合は、別の列を追加して、ユーザーがそのデータを見た後にsent設定します。true

于 2010-03-07T18:48:45.423 に答える