Web アプリケーションは、タイムリーに要求に応答する必要があります。実際の問題は、セッションがタイムアウトすることではなく、バックエンドにオフロードする必要があるときに、長時間実行されるプロセスがインラインで発生していることだと私は主張します。
ユーザーにレポートを待たせる代わりに、サーバー上でプロセスを開始してレポートを生成し、ユーザーの要求がキューに入れられて処理中であること、および要求が実行されたときにレポートが準備できることを示す応答でユーザーに応答します。プロセスが完了しました。
その後、ユーザーは引き続き Web サイトをナビゲートしたり、アプリケーションを使用したりできます。レポートが完了したら、さまざまな方法でユーザーに通知できます。アプリケーションは、おそらくレポートを添付して電子メールを送信できます。または、アプリケーション内通知システム (Facebook 通知機能など) が存在する可能性があります。これは、AJAX ポーリング メカニズムを備えているか、(JavaScript を使用しないことに関する更新に応じて) より受動的であり、次の最初のページ要求で通知するだけです。レポートの完成。
いずれにせよ、これほど時間がかかるプロセスは、Web アプリケーションでインライン化するべきではありません。
編集:提案されたセットアップとして、次のことができます:
- ユーザーがレポートを要求したら、レポートの生成を開始するために必要な情報を含むレコードをキュー テーブルに追加します。
- アプリケーション制御をユーザーに戻します。
- キュー テーブルをポーリングし、そのテーブル内のレポートを処理する Windows サービスまたはスケジュールされたコンソール アプリケーションを記述します。
- 各レポートが終了したら、表のステータスを更新します。
- 必要に応じて、サービス/アプリケーションからユーザーに通知することもできます (電子メール、Web サイトのアプリ内通知システムを駆動するテーブルへのレコードの追加など)。
- ユーザーは、通知に従ってレポートをダウンロードするか、Web サイトで「レポート キュー」を確認することができます。