0

現在、WCF RESTful サービスを使用していInstanceContextMode = InstanceContextMode .PerCallます。これを行ったのは、サービス メソッドが Entity Framework モデルと対話しPerCallSingle. ここで、大規模なデータセットを返す新しいサービス メソッドを追加したいと考えました。私の最初の考えは、サービスの起動時にスレッドをスピンオフし、データセットをキャッシュして、サービスメソッドが呼び出されたときにデータベースにヒットする必要がないようにすることでした...キャッシュを返すだけです。ただし、それに関する問題は、を使用しているためこれを行うことができないPerCallため、インスタンスが破棄された後、キャッシュも破棄されることです。

私の質問は、どのようなキャッシュ オプションがありますか? 本当に必要ですPerCallか、それともシングルトンにすることができますか?ただし、呼び出しごとに EF コンテキストが新しいことを確認してください。

4

1 に答える 1

1

あなたはEFのコンテキストと寿命について正しいです。可能な限り短命であるべきです。Web(-service) シナリオでは、通常、「要求/呼び出しごと」(最長で) を意味します。

もちろん、ライフタイムを自分で処理することもできますが、これは DI を備えた IoC コンテナーが真価を発揮するシナリオです。サービスと EF コンテキストを「リクエストごと」として登録し、キャッシュをシングルトンとして登録するだけで、コンテナーが面倒な作業を行い、正しい依存関係を挿入します。必要に応じて、より細かい有効期間のスコープを設定することもできます。

最も一般的なもののいくつか:

「 WCF サービスで依存性注入 (Ninject) を使用する方法」など、最も一般的な IoC コンテナーを WCF でセットアップするための優れたチュートリアルとガイドが多数あります。

于 2013-01-28T22:29:49.563 に答える