皆様に質問なのですが、IISを用いた.Net Web APIにてシングルトン等使われていますか?
当方始めてAPIを作っておりますが、シングルトンにSortedListで変数を持っています。まれに同時アクセスする際、ContainsKeyがfalseだったのに同じキーのエントリが存在するとの例外が発生します。
マルチテナントアプリのため、呼び出し元クライアントからのリクエストヘッダー内の施設情報を元に、設定を取得する必要があります。その際、毎回リードから入るのはもったいないためシングルトンに確保して居ます。
IISのワーカー再起動にて再度取得できるよう、ContainsKeyがfalseなら読み込んだ情報をシングルトンのプロパティのSortedListにAddする単純な作りです。
C#
1// シングルトン中のプロパティ例 2public SortedList HogeList<string, Hoge> { get; set;} 3 4// Add部分メソッド例 5public Hoge GetHoge(string keyStr) 6{ 7 Hoge result = null; 8 if (AppSingleton.Instance.HogeList.ContainsKey(keyStr)) 9 { 10 result = AppSingleton.Instance.HogeList[keyStr]; 11 } 12 else 13 { 14 // オプジェクト作るメソッド呼ぶ 15 result = CreateHoge(keyStr); 16 AppSingleton.Instance.HogeList.Add(keyStr, result); 17 // ↑ここで同じキーのエントリ...例外出る 18 } 19 return result; 20}
この場合、CreateHoge後にもう一回Containsかけるくらいしか思いつかないのですが、根本解決とは思えません。
そもそもWeb APIでこのようなシングルトンで持つのは適していないのか?
みなさんはどうやってるのか知りたいですー!
ちなみに、プロパティの型はDictionaryでも良かったなーソートの必要性無いし...
2018/04/27 10:11追記
私の開発環境は以下です。
.Net 4(Coreでない)
IIS8.5
ですが、ある意味技法的な質問でもあるのでいろいろな回答をお待ちしております!
回答2件
あなたの回答
tips
プレビュー