2016-07-19 1 views
0

まず、ユーザーがログインしてデータの「構成」を構築するためのウィザードの一種として機能するASP.NET MVCコアアプリケーションがあります。基本的には、ユーザーが各ページを通過する際に、この「構成」に異なるデータを構成/追加しています。これらのページを通過すると、設定は途中で保存されます。私が抱えている問題は、構成の進捗状況を保存し、アプリケーション全体に永続させる良い解決策を考え出すことです。ここに私のモデルのカップルの非常に単純化したバージョンであり、私は(あまりドメイン詳細に取得せずに)やってる:ASP.NETコア - アプリケーション全体でモデルを永続化する最善の方法は何ですか?

public class Configuration 
{ 
    string ConfigName; 
    CustomerInfo CustomerInfo; 
    InputData Input; 
} 

public class CustomerInfo 
{ 
    string CustomerName; 
    string Company; 
    string PhoneNumber; 
} 

public class InputData 
{ 
    int SomeNumber; 
    int SomeOtherInput; 
    int AnotherNumber; 
} 

ので、この場合には、私は基本的にはcustomerinfoのためのページを作成しています。ユーザーは顧客情報フォームを記入して保存し、InputDataの作成ページに移動して保存したり、別のビューにリダイレクトしたりするなどの操作を行います。これが起こっている間、私はこれらのすべてが属している "プロフィール"を追跡する必要があります。

複数のサーバが要求を提供している場合は特に、私はこれを保存するためにセッションを使用して考えられてきましたが、私はそれの欠点のいくつかを認識してよ - セッションが失われ得る、など

されるものこのようなもののためのより良いソリューション/ベストプラクティス?

編集:私はこのデータを保存するためにデータベースを使用していることに注意してください。この例では、CustomerInfoテーブルとInputDataテーブルへの外部キーをそれぞれ含む「Configuration」テーブルがあります。

+0

あなたの投稿のデータベースを検討することは言及していません。それに対するあなたの反対は何ですか? – mbeckish

+0

私は自分の投稿を編集してデータベースを使用していると言いました。私はそれぞれのテーブルにInputDataを保存することができますが、保存されているInputDataを設定中の現在のプロファイルに関連付ける方法が必要です。 – Blake

+0

データベースを使用して、潜在的に多くのサーバー間でセッションを永続化します。または、プロファイルテーブルを使用することで、ユーザーにprofileIdを与えることができます。これを使用して、データの他の部分を関連付けることができます。 – Stuart

答えて

0

ユーザー固有のデータに対してセッションを使用しました。私たちのアプリケーションは単一のサーバー(またはスティッキーセッションを持つ複数サーバーのシナリオ)だったので、セッションは正常に機能しました。そのためには、あなたの状況を評価する必要があります。適切に計画するために、マルチサーバー、Webファーム、単一サーバーなどを使用していますか。

もう1つの方法は、認証Cookie(ユーザーIDのような追加データを保存できます)に最小限のユーザー情報を格納し、Cookieから読み取ってポストバックにリロードするか、DBから要求されたときにリロードします。ユーザーに固有のもの(IDなど)だけを保存し、Cookie内にすべてのプロファイルデータを保存しないようにしてください。

+0

また、セッションが使用されると思います - SQL Serverモードはおそらく最も信頼性の高いオプションです。 –

+0

これはおそらく最も信頼性が高いでしょう。すべてがシリアル化可能であることを確認してください。そうしないとエラーが発生します。フットプリントが十分に小さく、プロキシで1つのセッションまたはスティッキーセッションを使用している場合、procでは通常は問題ありません。 –

関連する問題