如何在IIS下托管服务时为WCF ServiceHost事件创建监听器?

时间:2008-12-03 22:13:45

标签: c# wcf iis

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

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

3 个答案:

答案 0 :(得分:3)

您可以在包含资源的类上使用IDisposable模式和终结器。

在卸载AppDomain时,所有对象都已完成,如果引用资源的对象(此类连接)具有终结器,则将调用终结器,您可以在此时关闭/处置资源。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

WCF服务和IIS托管的重点是实现可扩展性并允许轻松托管。虽然您可以连接到ServiceHostBase类公开的事件(请参阅here),但我建议您反对它并分析您是否确实需要这些共享资源。要求您重新考虑的主要原因是:共享资源需要是线程安全的(IIS可以同时为多个请求提供服务),因此这会为应用程序的可伸缩性带来瓶颈,其次,如果您的服务是无状态的,那么最好这包括(我猜)共享资源(或应用程序范围的资源)的使用。