Asp.net MVCにアプリケーションがあり、ある時点で、プロセス実行の進行状況インジケーターを表示するモーダルダイアログをユーザーに表示したいと思います。
舞台裏のプロセスは、多くのデータベースデータ処理を実行します(既存のデータに基づいて、データベースに書き戻される多くの結果レコードを生成します)。プロセスには、短時間から非常に長い時間までかかる場合があります(既存のデータによって異なります)。
アプリケーションはこのプロセスを非同期で(Ajaxリクエストを介して)開始し、同じ方法で進行状況を表示します。
問題
プロセスを非同期的に開始してプロセスの終了を通知する非同期コントローラーについて少し読んだことがありますが、進行状況が表示されず、ブラウザーのタイムアウトがどのように処理されるかがよくわかりません。クライアントが行く限り、非同期リクエストは同期リクエストと同じです。したがって、クライアントは応答を待ちます(私が理解しているように)。主な違いは、サーバーが非同期で何かを実行するため、他の着信要求をブロックしないことです。私が実際にすべきことは次のとおりです。
- プロセスを開始し、プロセスが開始されたクライアントに応答するリクエストを作成します。
- クライアントは定期的にサーバーをポーリングしてプロセスの進行状況を確認し、パーセンテージ値(おそらくJSONとして)で即座に応答を返します。
- 進捗状況が100%になると、それは終了したことを意味するため、クライアントは結果を要求する必要があります。
非同期コントローラーがこのように機能するとは確信していません...
問題は、非同期コントローラーを理解していることがよくわからないため、今説明したように、この問題にどのアプローチを使用すべきかわからないということです。私は2つの可能性を自分で見ています。
- Asp.netMVC非同期コントローラーがこのように機能する場合
- 要求に応じてデータを処理し、その進行状況を報告するWindowsサービスアプリ-このサービスは、通常のコントローラーアクションを使用して特定のレコードをDBに書き込むことによって開始されます。それが開始され、サービスが進行状況をDBに書き込むため、Asp.netMVCアプリはクライアントプロセスのポーリング要求でそれを読み取ることができます。