Мы создали несколько служб WCF, которые обрабатывают асинхронные запросы. Мы используем basicHttpBinding
, поэтому наш InstanceContextMode
- это PerCall
, и это то, что вызывает небольшую путаницу. Мы наблюдаем необычное поведение с теми частями приложения, которое вводится с использованием контейнера Microsoft Unity
.Конкуренты IoC в службе WCF
Мы решим приведенную ниже ссылку для создания синглета Foo
, который используется во всем приложении. Однако, когда услуга попадает быстро, Foo
будет иногда генерировать исключения, указывающие на то, что к ним обращаются несколько потоков и в результате его состояние изменяется неожиданным образом.
Container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());
Теперь, если мы изменим менеджер пожизненная к TransientLifetimeManager
- по существу говоря контейнер, чтобы придать новый экземпляр класса каждый раз, когда она решена, проблема будет устранена.
С моей точки зрения, WCF не контролирует время жизни AppDomain, хозяин делает. В нашем случае это IIS. Таким образом, учитывая эту информацию, возможно, что наши запросы WCF PerCall
работают правильно, но из-за того, как управляется AppDomain, можно ли получить доступ к одному и тому же инжектированному объекту из-за его реализации singleton?
Спасибо за ваше время!
единство создается внутри поведения IInstanceProvider или это инъекционные зависимости иначе? – ErnieL