我们创建了几个处理异步请求的 WCF 服务。我们正在使用basicHttpBinding
,因此我们的InstanceContextMode
is PerCall
,这就是造成一些混乱的原因。我们看到使用 MicrosoftUnity
容器注入的应用程序的这些部分出现异常行为。
我们正在解析下面的参考,以创建一个Foo
在整个应用程序中使用的单例。但是,当服务快速连续命中时,Foo
偶尔会抛出异常,表明它正被多个线程访问,并因此以意想不到的方式改变了它的状态。
Container.RegisterType<IFoo, Foo>(new ContainerControlledLifetimeManager());
现在,如果我们将生命周期管理器更改为TransientLifetimeManager
- 本质上是告诉容器在每次解决该类时注入一个新实例,问题就得到了纠正。
Container.RegisterType<IFoo, Foo>(new TransientLifetimeManager());
据我了解,WCF 不控制 AppDomain 的生命周期,主机控制。在我们的例子中,就是 IIS。因此,鉴于此信息,我们的PerCall
WCF 请求是否可能正常工作,但由于 AppDomain 的管理方式,我们是否可以访问同一个注入对象,因为它的单例实现?
谢谢你的时间!