0
我们有一个MVC应用程序使用下游Web服务通过wcf。 我们遵循proposed approach注册一个单例ChannelFactory,它将创建一个通道InstancePerDependency(如果我没有弄错)。wcf autofac集成挂在ServiceChannelFactory.ChannelCreated
我们在生产中注意以下问题:
- 剖析表明,过多的时间量System.ServiceModel.Channels.ServiceChannelFactory .ChannelCreated花费(100毫秒很少,偶见多秒)。唯一可以在该方法中花费大量时间的是获取锁定。
- 性能计数器显示随着时间的推移CLR> Lock和Thread> Contention Rate/sec线性增加。
我怀疑某些渠道没有妥善处置。 ChannelFactory保存所有通道的列表(OnCreated在获取锁后将新通道添加到列表中)。当频道关闭或中止时,获取锁定后将从列表中删除。如果列表变得很大,删除可能需要很长时间,并且OnCreated必须等待锁定。
我们将autofac解析成IService注入Controller方法,并且在某些情况下也使用DependecyResolver.Current.GetService。我的理解是,autofac WCF集成将负责处理。那不是吗?什么是确保渠道处置的正确方法?