非同期要求を処理するいくつかの WCF サービスを作成しました。を使用しているbasicHttpBinding
ため、 を使用してInstanceContextMode
おりPerCall
、これが少し混乱を引き起こしています。Unity
Microsoft のコンテナーを使用して注入されたアプリケーションのこれらの部分から異常な動作が見られます。
Foo
アプリケーション全体で使用されるシングルトンを作成するために、以下の参照を解決しています。ただし、サービスが立て続けにヒットするFoo
と、複数のスレッドによってアクセスされ、結果として予期しない方法で状態が変更されたことを示す例外がスローされることがあります。
Container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());
ここで、ライフタイム マネージャーを変更すると、TransientLifetimeManager
基本的に、コンテナーが解決されるたびにクラスの新しいインスタンスを挿入するように指示されます。これにより、問題は修正されます。
Container.RegisterType<IFoo, Foo>(new TransientLifetimeManager());
私の理解では、WCF は AppDomain の有効期間を制御するのではなく、ホストが制御します。私たちの場合、それは IIS です。したがって、この情報があれば、PerCall
WCF 要求が正しく機能している可能性がありますが、AppDomain の管理方法が原因で、シングルトン実装のために同じ注入されたオブジェクトにアクセスできますか?
御時間ありがとうございます!