2008-12-03 79 views
3

我有一个WCF服务,将在IIS下托管。现在我有一些资源(连接),我在服务构造函数中创建。当托管服务的IIS关闭或重置时,我需要释放这些资源。这些不是我每次客户端断开时都要清除的资源,但它们是应用程序范围的资源,只有在服务本身或IIS关闭时才会释放资源。如何在IIS下托管服务时为WCF ServiceHost事件创建监听器?

我看到另一篇文章,有人提到他创建了一个监听器来捕获ServiceHost的事件。有人可以帮我弄清楚如何获得ServiceHost的句柄并捕获IIS重置或IIS关闭事件并释放WCF服务中的资源?

回答

3

嗯,我没有想法,但我认为this article包含在“访问IIS中的ServiceHost”一章中的答案。看起来你需要建立自己的HostFactory,因为开箱即用的IIS使用标准的HostFactory,并且实际上控制着主机的创建和销毁。通过提供您自己的HostFactory,您可以添加自己的代码来控制初始化和销毁​​...

+0

正确。但请记住,构建一个自定义的ServiceHostFactory并不难。它主要是样板。 – Cheeso 2009-06-01 18:54:14

0

WCF服务和IIS托管的重点是实现可伸缩性并允许轻松托管。尽管您可以连接到由ServiceHostBase类公开的事件(请参阅here),但我会建议您不要这样做,并分析您是否真的需要这些共享资源。要求您重新思考的主要原因是:共享资源需要线程安全(IIS可以同时处理多个请求),因此这会给应用程序的可伸缩性带来瓶颈;其次,如果您的服务是无状态的,这包括(我猜)共享资源(或应用程序范围资源)的使用情况。

3

您可以在持有资源的类上使用带终结器的IDisposable模式。

在卸载AppDomain时,所有对象都已最终确定,并且如果引用资源(如此连接)的对象具有终结器,则终结器将被调用,并且您可以关闭/处理该点处的资源。