3

SessionState をかなり頻繁に使用していた asp.net mvc4 アプリをステートレス アプリに変換しようとしています。この情報を DB に保存できることを理解しており、そうするつもりです。

ただし、私の質問は、私の特定のアーキテクチャに関するものです。私のアプリには、いくつかの部分ビュー パネルで構成されるメインの「ページ」があり、それぞれに他のパネルに影響を与えるアクションがあります。私が今まで行ってきたことは、viewModel の状態全体 (多数の相互に関連する EF リスト コレクションと「レコード」オブジェクト) をセッションに格納することであり、うまく機能しています。セッションがランダムに終了する場合を除きます。

したがって、このデータをセッションから取り出して、必要に応じて再構築できる DB に入れる必要があります。私の懸念は、情報をデータベースに保存すると、画面上で実行されるすべてのアクションが 3 ~ 5 の異なるパネルに影響を与え、それぞれが独自の状態更新を行う可能性があることです。これは、対話ごとに DB への最低 10 往復です!

このアイデアをよりスケーラブルにするために使用できる戦略は何ですか?

追加情報

ここで問題となっているビューは、一種の POS ショッピング カート システムです。イベントの選択、カートへのアイテムの選択/追加、カート アイテムの編集、連絡先の選択、連絡先の編集、カート アイテムの表示、カートの「小計」の表示、最後に [チェックアウト] ボタンのあるパネルがあります。

新しいイベントを選択すると、利用可能なアイテムのリストが変更されます。カートに追加するアイテムを選択すると、カートのアイテム リスト、小計、およびチェックアウト パネルが変更されます。カート項目の編集も同様です。

主な関心事は、失われたセッションから回復する方法です。組み込みの asp.net セッション コードの信頼性が低すぎることがわかったからです。私のテスターは、セッションがタイムアウトになるという問題に遭遇し、その後、私のアプリにはいかなる種類の回復プロセスもありません。平均 10 人のユーザーがいる 1500 のサイトにインストールすると、セッションが失われるという問題が発生するので、実際の問題になる前に対処する必要があります。

私は無国籍にならないことに同意します...急いで使用される言葉の選択が間違っています。その状態を、セッションの失敗を超えて信頼できる形に変えようとしているだけです。私の現在の主なアイデアは、セッションをviewModelデータのローカルキャッシュとして引き続き使用することですが、セッションが何らかの形で失われた場合にDBからviewModelを再構築できるフォールバック操作を行うことです。

4

2 に答える 2

1

You shouldn't necessarily be using a database to store (what sounds like) data that only needs to be persisted in the short term.

If these changes to the other partials are only relevant in the context of the current "master view," then I would suggest using jQuery AJAX to send off the requests, parse the response JSON and update the other views. Tutorials on jQuery AJAX and ASP.NET MVC are easy to find, if you don't already have the knowledge:

http://www.codeproject.com/Articles/41828/JQuery-AJAX-with-ASP-NET-MVC

This way, you don't need to make a bunch of round trips. If the changes need to be persisted beyond the context of the current view, make ONE round trip to the database to perform the update and then simply update all of the other partials from the in-memory response from the AJAX call.

You don't need to read from secondary storage multiple times when you already have all of the information you need in-memory. Just do the reading and writing once.

于 2013-05-02T19:35:29.843 に答える
0

ハイブリッドアプローチを採用することにしました。私はまだセッションを使用していますが、セッション部分が失われた場合に DB がセッションをシームレスに再構築するために必要な値を提供できるように、DB の「回復」オプションを構築しています。

これまでのところ、うまく機能しているようです。

于 2013-06-18T15:12:40.060 に答える