0

非同期要求を処理するいくつかの WCF サービスを作成しました。を使用しているbasicHttpBindingため、 を使用してInstanceContextModeおりPerCall、これが少し混乱を引き起こしています。UnityMicrosoft のコンテナーを使用して注入されたアプリケーションのこれらの部分から異常な動作が見られます。

Fooアプリケーション全体で使用されるシングルトンを作成するために、以下の参照を解決しています。ただし、サービスが立て続けにヒットするFooと、複数のスレッドによってアクセスされ、結果として予期しない方法で状態が変更されたことを示す例外がスローされることがあります。

Container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());

ここで、ライフタイム マネージャーを変更すると、TransientLifetimeManager基本的に、コンテナーが解決されるたびにクラスの新しいインスタンスを挿入するように指示されます。これにより、問題は修正されます。

Container.RegisterType<IFoo, Foo>(new TransientLifetimeManager());

私の理解では、WCF は AppDomain の有効期間を制御するのではなく、ホストが制御します。私たちの場合、それは IIS です。したがって、この情報があれば、PerCallWCF 要求が正しく機能している可能性がありますが、AppDomain の管理方法が原因で、シングルトン実装のために同じ注入されたオブジェクトにアクセスできますか?

御時間ありがとうございます!

4

1 に答える 1

0

UnityWcf を見てください。Unity のオブジェクトの有効期間を WCF の InstanceContextMode に合わせるために、いくつかの異なるアプローチを試しました。これは非常にうまく機能します:

http://unitywcf.codeplex.com

于 2013-04-17T14:13:04.843 に答える