WCF服务中的IoC冲突

本文关键字:IoC 冲突 服务 WCF | 更新日期: 2023-09-27 18:09:34

我们已经创建了几个处理异步请求的WCF服务。我们用的是basicHttpBinding,因此我们的InstanceContextMode就是PerCall这就是造成混乱的原因。我们看到应用程序中使用微软的Unity容器注入的那些部分出现了不寻常的行为。

我们正在解析下面的引用,以创建一个在整个应用程序中使用的Foo的单例。然而,当服务被快速连续访问时,Foo偶尔会抛出异常,表明它正在被多个线程访问,并且其状态以意想不到的方式改变。

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

现在,如果我们将生命周期管理器更改为TransientLifetimeManager -本质上是告诉容器每次解决该类时注入一个新的实例,问题就得到了纠正。

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

根据我的理解,WCF不控制AppDomain的生命周期,主机控制。在我们的例子中,就是IIS。因此,给定这些信息,我们的PerCall WCF请求是否有可能正常工作,但是由于AppDomain的管理方式,我们是否可以访问由于其单例实现而注入的相同对象?

谢谢你的时间!

WCF服务中的IoC冲突

看看UnityWcf。我尝试了几种不同的方法来调整Unity中对象的生命周期到WCF中的InstanceContextMode。

http://unitywcf.codeplex.com