0

我们创建了几个处理异步请求的 WCF 服务。我们正在使用basicHttpBinding,因此我们的InstanceContextModeis PerCall,这就是造成一些混乱的原因。我们看到使用 MicrosoftUnity容器注入的应用程序的这些部分出现异常行为。

我们正在解析下面的参考,以创建一个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 回答