カスタム UsernamePasswordValidator を使用している WCF サービスがあります。バリデータはエンティティ フレームワーク コンテキストにアクセスする必要があります。
サービス呼び出し全体に対して 1 つの ObjectContext を作成し、呼び出しの最後に破棄/破棄したいと考えています。そこで、この機能を提供するシングルトン静的クラスを作成しましたが、現在起こっていることは、2 つのサービス呼び出しが同時に発生した場合、呼び出しの 1 つがシングルトンを破棄するということです。
ObjectContext へのローカル参照を保持します。この場合、それを使用する 2 番目のサービスはそれを破棄され、スローしてエラーと見なします。または、Singleton クラスの必要な場所にラッパー プロパティを配置し、すべての変更がスローされます。別の呼び出しがそれを破棄した場合、オブジェクトの新しいインスタンスを取得しているためです。
基本的に私の質問は、サービス呼び出しごとに ObjectContext をインスタンス化するにはどうすればよいですか?
注: インスタンスは、サービス コードとカスタム UsernamePasswordValidator コードの両方でアクセス可能である必要があります。
カスタム UsernamePasswordValidator はそれにアクセスできないため、コンストラクターでそれを実行したり、using ステートメントを使用したりすることはできません。呼び出しごとに静的クラスを持つ方法はありますか? それは不可能に聞こえますが、これを回避する方法は何ですか?セッションでオブジェクトをキャッシュする必要がありますか?
私のサービスは IIS でホストされています。
更新:
したがって、IExtension オブジェクトを使用して InstanceContext に状態を格納することにこれを釘付けにしました。しかし、UsernamePasswordValidator で現在の InstanceContext にアクセスするにはどうすればよいですか?