Azure でホストされている MVC 3 アプリをコーディングしました。セッション変数を使用して、実行時間の長いプロセスの 1 つで http 呼び出し間の更新ステータス情報を保存しています。これは、進行状況バーを更新するために使用されます。値はかなり急速に変化する可能性があります。
InProc セッション プロバイダーを使用する場合、これはすべてうまく機能します。ただし、Azure キャッシュ セッション プロバイダーを使用するように変更するたびに、実行時間の長いプロセスからセッション変数が更新されません。
現在、キャッシュ変数を直接使用するように変更していますが、これは今のところ機能しているようです。
キャッシュ内でセッションを使用すると次のメソッドが機能しないのに、InProc は問題ないのはなぜですか?
たとえば、1 つのコントローラー ActionResult でセッション変数を開始するように設定します。
Session["OPERATION_PROGRESS"] = 0;
次に、次のようなセッションのハンドルを取得します
HttpSessionStateBase session = Session;
そしてそれを私の長期実行プロセスに渡します
LongRunningProcess.Go(session);
次に、LongRunningProcess メソッド内から、渡されたセッション オブジェクトを使用してタスクの進行に合わせてセッション変数を更新します。
passedSession["OPERATION_PROGRESS"]=10;
Web クライアントは、進行状況バーを更新するためにセッション変数の値を返す進行状況ページを呼び出します。