2

Asp.net MVCにアプリケーションがあり、ある時点で、プロセス実行の進行状況インジケーターを表示するモーダルダイアログをユーザーに表示したいと思います。

舞台裏のプロセスは、多くのデータベースデータ処理を実行します(既存のデータに基づいて、データベースに書き戻される多くの結果レコードを生成します)。プロセスには、短時間から非常に長い時間までかかる場合があります(既存のデータによって異なります)。

アプリケーションはこのプロセスを非同期で(Ajaxリクエストを介して)開始し、同じ方法で進行状況を表示します。

問題

プロセスを非同期的に開始してプロセスの終了を通知する非同期コントローラーについて少し読んだことがありますが、進行状況が表示されず、ブラウザーのタイムアウトがどのように処理されるかがよくわかりません。クライアントが行く限り、非同期リクエストは同期リクエストと同じです。したがって、クライアントは応答を待ちます(私が理解しているように)。主な違いは、サーバーが非同期で何かを実行するため、他の着信要求をブロックしないことです。私が実際にすべきことは次のとおりです。

  1. プロセスを開始し、プロセスが開始されたクライアントに応答するリクエストを作成します。
  2. クライアントは定期的にサーバーをポーリングしてプロセスの進行状況を確認し、パーセンテージ値(おそらくJSONとして)で即座に応答を返します。
  3. 進捗状況が100%になると、それは終了したことを意味するため、クライアントは結果を要求する必要があります。

非同期コントローラーがこのように機能するとは確信していません...

問題は、非同期コントローラーを理解していることがよくわからないため、今説明したように、この問題にどのアプローチを使用すべきかわからないということです。私は2つの可能性を自分で見ています。

  1. Asp.netMVC非同期コントローラーがこのように機能する場合
  2. 要求に応じてデータを処理し、その進行状況を報告するWindowsサービスアプリ-このサービスは、通常のコントローラーアクションを使用して特定のレコードをDBに書き込むことによって開始されます。それが開始され、サービスが進行状況をDBに書き込むため、Asp.netMVCアプリはクライアントプロセスのポーリング要求でそれを読み取ることができます。
4

1 に答える 1

1

私はプロジェクトでAsynchコントローラーを自分で使用したことはありません。ただし、ここにある人へのリンクがあります。

非同期処理-asp-net-mvc-with-ajax-progress-bar

私は個人的に大規模な制作プロジェクトでナンバー2を使用しました。

2番目は、OpenSSHを使用して2つのサーバー間で通信する別のサーバーで実行されるサービスアプリでした。進行状況を定期的にポーリングして、AJAXを介して進行状況バーをクライアントUIに更新します。

さらに、Webサーバーを長時間実行されるプロセスから分離することにより、懸念事項を分離します。Webサーバーは、ディスクへのファイルの書き込みやIOの処理などに関心がないため、そのような負担をかけるべきではありません。

長時間実行されているプロセスを強制終了または失敗する必要がある場合、これはWebサーバーが要求を処理したりトランザクションを処理したりすることに影響を与えません。

もう1つの提案は、非常に長時間実行されるプロセスでは、クライアントに待機の負担をかけず、後で戻って進行状況を確認するオプションを提供することです。つまり、完了したら電子メールを送信します。

または、実際に何か面白いものを見せてください。私たちの場合、署名されたJavaアプレットに、その瞬間に彼らのプロセスが何をしているかを正確に示してもらいました。

于 2011-07-04T00:33:18.913 に答える