2013-04-17 3 views
0

우리는 비동기 요청을 처리하는 몇 가지 WCF 서비스를 만들었습니다. 우리는 basicHttpBinding을 사용하고 있습니다. 따라서 InstanceContextModePerCall이며 약간 혼동을 일으키는 원인이됩니다. Microsoft의 Unity 컨테이너를 사용하여 주입되는 응용 프로그램의 부분에서 비정상적인 동작이 나타납니다.WCF 서비스 내 IoC 충돌

응용 프로그램 전체에서 사용되는 Foo의 싱글 톤을 만들기 위해 아래 참조를 해결합니다. 그러나 서비스가 빠르게 연속해서 실행될 때 Foo은 가끔씩 여러 스레드에서 액세스하고 그 결과 상태가 예상치 못한 방식으로 변경되었음을 나타내는 예외를 throw합니다. 우리가 TransientLifetimeManager에 수명 관리자를 변경하는 경우

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

는 지금 - 기본적으로 클래스가 해결 것마다의 새로운 인스턴스를 주입 컨테이너를 말하는 문제가 수정됩니다.

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

제 생각에 WCF는 AppDomain의 수명을 제어하지 않습니다. 호스트는 않습니다. 여기서는 IIS입니다. 따라서이 정보를 통해 PerCall WCF 요청이 올바르게 작동 할 수 있지만 AppDomain 관리 방법으로 인해 singleton 구현으로 인해 동일한 주입 된 개체에 액세스 할 수 있습니까?

시간 내 주셔서 감사합니다.

+0

유니티는 IInstanceProvider 동작 내에서 생성하거나 다른 방법으로 종속성을 주입한다 : 이것은 매우 잘 작동? – ErnieL

답변

0

UnityWcf를 살펴보십시오. Unity의 객체 수명을 WCF의 InstanceContextMode에 맞추는 데 몇 가지 다른 접근 방식을 시도했습니다.

http://unitywcf.codeplex.com

관련 문제