0

我正在使用 Castle Windsor 将依赖项注入到多个 WCF 服务中。我们还使用 Castle.Facilities.WcfIntegration.DefaultServiceHostFactory 和城堡的 wcfFacility。我们的服务托管在 IIS 中,这使我可以访问 Global.aspx 事件。我们所有的组件都在瞬态生命周期中注册。目前我在 application_start 事件期间注册容器中的所有组件,然后在 application_end 中处理容器。

但是,在阅读了几个博客和一些 SO 帖子后,我开始担心我的解决方案有漏洞。换句话说,我认为在 application_end 释放容器会导致内存从我的应用程序中慢慢泄漏。我正在考虑在 request_start 和 request_end 或mabye session_start 和 session_end 事件中注册和释放。我遇到的问题是我不知道在哪里“保留”容器,所以我可以在会话或请求结束后释放它。有没有人遇到过这个问题?如果是这样,你是如何解决的?我的解决方案听起来对吗?

4

1 回答 1

1

实例化容器并在其中注册所有内容Application_Start是正确的做法,并且将容器处置在其中Application_End也是正确的。

通常,当提到与 Castle Windsor 相关的“内存泄漏”一词时,这是因为临时组件没有正确释放其实例,这反过来可能导致实例在容器中累积。这是因为 Windsor 会跟踪它交给您的实例,如果它们的依赖关系图包含任何涉及退役的东西(例如,实现的东西IDisposable)。

因此,作为温莎的一般规则,您应该始终释放您解决的问题。

从未使用过 WCF 设施,我并不是这方面的专家,但如果它没有正确发布它解决的所有问题,我会感到非常惊讶 - 所以我很好奇你是否知道有问题,或者如果你只是保持谨慎?

于 2012-06-20T05:05:37.503 回答