【发布时间】:2009-06-24 12:11:46
【问题描述】:
我在我的应用程序中设置了一个依赖注入容器,我认为每次 WCF 服务请求进入时组合容器都会效率低下。
有人可以向我解释一下,对于 http/IIS 托管的 WCF 服务,服务的生命周期是什么?如果我能弄清楚这一点,我就可以对容器的存储、实例化、销毁等位置做出明智的决定。
【问题讨论】:
标签: wcf
我在我的应用程序中设置了一个依赖注入容器,我认为每次 WCF 服务请求进入时组合容器都会效率低下。
有人可以向我解释一下,对于 http/IIS 托管的 WCF 服务,服务的生命周期是什么?如果我能弄清楚这一点,我就可以对容器的存储、实例化、销毁等位置做出明智的决定。
【问题讨论】:
标签: wcf
如果您的InstanceContextMode 是PerCall,则将为每个传入请求从头开始创建服务类,然后在完成后将其处理掉。
如果您的InstanceContextMode 是PerSession,则将创建服务类并在会话期间(或直到遇到“InactivityTimeout”或错误)为给定客户端提供服务发生)。
如果你的InstanceContextMode是Single(单例),服务类会在第一个请求进来的时候创建,并且只要请求不断进来就会一直留在内存中,只要没有发生错误,没有达到 inactivityTimeout。
所以,你有它!当然,并发模式(PerSession 和 Single 服务)也会发挥作用,让事情变得更“有趣”
【讨论】:
当您提到您尝试将 WCF 服务实例化与依赖注入容器集成时,我只想说我在使用 Castle WCF Integration Facility 来做到这一点时获得了非常积极的体验。
它特定于 Castle Windsor 依赖注入容器,但由于它是开源的,您可以深入了解并了解所提供的一些挑战和解决方案。
【讨论】: