2

最初のWCFサービスを作成しようとしていますが、アプリケーションデータを保存しようとしています。

ServiceContractsとDataContractsを作成しましたが、サービスは機能しています。

ここで、データベースからいくつかの構成データを読み取り、このデータをアプリケーションスコープに保存して、サービスが有効である限り、後続のリクエストでデータを利用できるようにします。そうすれば、リクエストを処理するたびにデータベースに接続する必要がなくなります。データを構成ファイルに保存したくありません。データは既に上記のDBに存在し、複製したくありません。

私は以下を実装して動作させています。

注1:サンプルを単純にするためにデータベースコードを削除しました。

注2:MemoryCacheクラスは、System.Runtime.Caching名前空間内に存在します。

private void LoadConfigData()
{
    if (!MemoryCache.Default.Contains("ConfigData"))
    {
        CacheItemPolicy cachePolicy = new CacheItemPolicy() {
                  AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(5) };

        MemoryCache.Default.Add(
                  "ConfigData",
                  "ImagineThereIsDBDataHere",
                  cachePolicy);
    }
}

これは使用するのに正しいアプローチですか?

この投稿では、ApplicationクラスとHttpContextの使用について説明しています。

WCFサービスからグローバルアプリケーションプロパティを読み取る

しかし、現在、私のプロジェクトではこれらのどちらも利用できません。

このスレッドは安全ですか?サービスに対して複数のリクエストが行われ、キャッシュが空の場合、競合状態になりますか?

これは私の最初の質問でもあるので、詳細を見逃した場合はお知らせください。更新します。

ありがとう。

4

1 に答える 1

3

MemoryCacheオブジェクトのAddOrGetExistingメソッド (またはこのオーバーライド) を使用して、スレッドセーフな方法でこれを実現できます。

Application または HttpContext クラスについて心配する必要はありません。それらは System.Web 名前空間にあり、WCF での使用はお勧めできません。あなたはすでに正しいことをしています。

于 2013-03-05T17:21:48.633 に答える