2017-02-06 11 views
0

ASP.Net conundrum全体の初心者!!複数のリクエストにまたがるデータオブジェクトモデルを再利用

私は、クライアントから連続して呼び出される一連のWeb API(アクション)をコントローラに持っています。すべてのAPIは、データベースからフェッチされたデータモデルオブジェクトに依存しています。今、私はこのデータをフェッチして透過的にキャッシュするDAOレイヤを持っています。したがって、API呼び出しごとにデータベースへのラウンドトリップがないため、直ちに問題は発生しません。しかし、DAOレイヤーは別のチームによって管理されており、キャッシュが存在し続けるかどうか、または動作が変更されないという保証はありません。

モデルオブジェクトのプロパティまたは属性は変更されますが、あまり頻繁ではありません。したがって、クライアントからのAPI呼び出しをバンドルとして参照すると、バンドルが実際にこのデータを一度クエリして値の変更を心配することなく使用できると思うことができます。どうすればこれを達成できますか?私が使用できるASP.Netの世界のどこかにデザインパターンがありますか?私が望むのは、定期的な間隔でこの値をフェッチして、API呼び出しのうちの1つが失敗して基礎となる値が変更されたことを示す場合にリフレッシュすることです。

+0

各「バンドル」に対して[セッション状態](https://msdn.microsoft.com/en-us/library/ms178581.aspx)を作成する必要があります。つまり、あなたのパフォーマンスを損なうであろう無国籍状態を避けることを意味し、セッションがいつ開始し、いつ終了するかを定義する必要があります。すなわち、プログラムが "バンドル"の始めと終わりを検出し、同じ期間に異なるクライアントからトランザクションが受信されたとき)。サービスは認証を必要としますか? –

+0

サービスに認証が必要です。基本的にすべてのAPI呼び出しはセッショントークンで認証されます – Dibzmania

答えて

0

使用可能な手法がいくつかあります。まず、データアクセスレイヤーに既に2番目のキャッシュが必要な理由がありますか?

あなたは、サードパーティのライブラリを使用して、Web APIの応答レベルにキャッシュを置くことができるStrathweb.CacheOutputと呼ばれ、そして:

CacheOutputは、サーバー側のキャッシュの世話をし、適切なクライアント側(レスポンス)のヘッダーを設定しますあなたのために。

またSystem.Runtime.CachingからMemoryCacheを使用して、よりマニュアルのアプローチを使用してデータアクセス層からのデータをキャッシュすることができます。

可能なインフラだ内容に応じて、カサンドラまたはRedisののような分散キャッシュは最良の選択かもしれません。

関連する問題