バックグラウンド:
これが私のプロジェクトです。ASP.NET MVC4 Web アプリでは、ユーザーは情報を入力してサーバーに投稿します。その後、サーバーは長いタスクの実行を開始します (1 秒未満から 20 分まで。通常は約 4 分)。
Controller アクションですべての作業が行われるのは望ましくありません。そうしないと、ユーザーは何が起こっているのかについてのフィードバックなしで完了するのを待つ必要があります。したがって、ユーザーをステータスページに送り、サーバーからそのページに更新を送信したいと思います。
現在の部分的なソリューション:
ここに私がこれまでに持っているものがあります: コントローラーは長時間実行されるアクションでタスクを開始し、ユーザーをステータス ページに誘導します。タスクが実行されると、SignalR を使用してステータス ページにメッセージが返され、ページが更新されます。
問題:
- SingalR はすべてのクライアントを更新しているため、複数のユーザーが同時にこのアプリを使用することはできません。SignalR には特定のクライアントにメッセージを送信する方法があることがわかりましたが、どうすればクライアント ID をコントローラーに取得できますか? SignalR は、セッションへのアクセスを困難 (不可能?) にします。
- ステータス ページが読み込まれる前にタスクが終了した場合 (または、ページが読み込まれる直前に更新の間に一時停止がある場合)、ステータス ページにはタスクに関する情報がありません。繰り返しますが、セッションのステータスを保存するのはいいことですが、それを機能させることができないようです。
SignalR と ASP.NET でクライアントの状態を同期させる方法はありますか? SignalR は仕事に適したツールですか?