1

私たちのアプリケーションでは、ページが提供され、その後、より多くのデータに対して一連の非同期呼び出しを並行して行うことになっています。これらの呼び出しはキューに入れられていましたが、同じセッションに複数の要求を書き込むことで発生する可能性のある複雑さのために、同じセッションを使用する呼び出しがキューに入れられていることを読みました。

また、コントローラーをセッションレスに設定できる[SessionState(SessionStateBehavior.Disabled)][SessionState(SessionStateBehavior.ReadOnly)]、セッションに書き込む必要がないことも読みました。

セッションに書き込む必要がないため、これらを試してみたので、リクエストが同時に処理されるか、気づかずにセッションを使用していると例外がスローされると考えました。

これらのいずれにも当てはまりません。同じユーザーからの要求がまだキューに入れられています。

私の指示[SessionState(SessionStateBehavior.ReadOnly)]が尊重されていることをどのように確認できますか? この問題の原因は何ですか?

関連する場合は、Orchardのコンテキスト内で作業しています。

4

2 に答える 2

2

Orchard 1.6 では、またはSessionStateのプロパティを設定できます。RouteDescriptorSessionStateBehavior.ReadOnlySessionStateBehavior.Disabled

したがって、必要なことはRoutes、コントローラーにマップされ、上記のいずれかを持つ新しいルートをクラスに作成することだけSessionStateBehaviorsです。SessionState後でコントローラーを属性で装飾する必要はありません。

于 2013-04-20T18:29:13.943 に答える
1

これは、すべてのオーチャード ルート要求に使用されている基になる HTTP ハンドラーがIRequiresSessionStateインターフェイスを実装しているためです。これが、すべてのリクエストが実際にキューに入れられる理由です...

これは既知の問題であり、重大な変更を意味しない限り、次の Orchard バージョンで修正を試みる予定です。セッションに依存する (または依存する可能性がある) いくつかのコア機能 (および不明な数の外部のカスタム機能) があるため、IRequiresSessionStateインターフェイスを単純に削除することはできません。最初にリファクタリングを行い、オプトイン/オプトアウトのメカニズムを実装する必要があります。

于 2012-07-13T14:40:37.943 に答える