2009-07-23 14 views
23

特定のコントローラまたはアクションがセッション状態を読み取り専用で使用するよう指定する方法はありますか? "古い" ASP.NETでは、次のようなことをしました。ASP.NET MVCでの読み取り専用セッションの指定

<%@ Page EnableSessionState="ReadOnly" %> 

ASP.NET MVCに相当するものはありますか?私は自分のアプリケーションが同じクライアントからの複数の要求を同時に処理できるようにしたいと思っています。私の場合、セッションを完全に無効にすることはオプションではありません。

+0

[ASP.Net MVCでごと要求を無効にセッション状態]の可能な重複(http://stackoverflow.com/questions/1464203/disable-session-state-per-request-in-asp -net-mvc) – Liam

答えて

8

同様の質問がここに頼まれた。最終的にセッションに結合するスキップカスタムルートハンドラを作成してDisable Session state per-request in ASP.Net MVC

受け入れ答えのお得な情報を。これはあなたの質問に正確に答えるものではありません(これは、読み取り専用のセッションアクセスを使用する複数のアクションを宣言する方法です)。

1

これはちょっと難しいかもしれません。私の理解は、セッション状態を設定することがIHttpHandlerレベルで起こったことです。カスタムハンドラでは、IReadOnlySessionStateなどのマーカーインターフェイスを使用してセッション状態を指定し、読み取り専用のセッション状態だけが必要であることを宣言できます。それをあなたのコントローラーに追加し、それがどのように飛ぶのか見ることができます。私は、ASP.NET MVCコントローラは、IHttpHandlerが接続された後にうまく動作するので、それができないと思うだろうが、それは価値がある。

別の解決方法は、自分のクラスにセッション状態変数をラップし、読み取り専用のバージョンを公開して読み取り専用にすることです。複数のリクエストにまたがってアクセスすることは問題ではありませんが、複数の角度から同じセッション変数に書き込もうとすると、競合状態になる可能性があります。

+0

目標は、変数を読み取り専用にすることではなく、1つのクライアントからMVCページへの複数の同時要求を許可することです。読み取り専用ラッパーにセッション変数をラップしてもそれは役に立ちません。 – Mark

+0

私は、あなたがそれに従っているとは思えません。なぜなら、同時更新が存在する可能性がある場合、競合状態を回避しないとReadOnlyはどうして問題なのですか?あなたのすべてのページがちょうどセッションデータを読んでいるなら、同時に要求をすることは傷つくことはありません。すべてのページでセッションを同時に更新する必要がある場合は、ReadOnlyとしてラッピングすることは役に立ちません。 –

+1

読み取り専用セッションが指定されていない限り、ASP.NETランタイムは同じクライアントからの複数の要求を許可しないため、読み取り専用の問題です。読み込み専用のセッションを指定しない限り、同時リクエストはできません。その質問はASP.NET MVCでどうやって行うのかを尋ねます。 – Mark

-2

モデルで静的な「読み取り専用」にしたいデータを設定するのはどうですか?このようにして、MVCに同じデータを同時に要求することができます。

+2

スレッドの問題は私がここで解決しようとしているものではなく、どちらのセッション状態もオフになっていると思わない限り、ASP.NETは1つのWebアプリケーションで同じクライアントからの複数の要求を同時に処理させません要求を処理している特定のハンドラがセッション状態を変更しないことに注意してください。モデルのフィールドを静的にすることは、セッション状態が読み取り専用であることをASP.NETに通知しません。 – Mark

関連する問題