【问题标题】:How to Create a Listener for WCF ServiceHost events when service is hosted under IIS?当服务托管在 IIS 下时,如何为 WCF ServiceHost 事件创建侦听器?
【发布时间】:2008-12-03 22:13:44
【问题描述】:

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

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

【问题讨论】:

    标签: c# wcf iis


    【解决方案1】:

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

    【讨论】:

    • 正确。但请记住,构建自定义 ServiceHostFactory 一点也不难。它主要是样板。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      WCF 服务和 IIS 托管的全部意义在于实现可伸缩性并允许轻松托管。尽管您可以连接到 ServiceHostBase 类公开的事件(请参阅here),但我建议您不要这样做,并分析您是否真的需要这些共享资源。要求您重新考虑的主要原因是:共享资源需要是线程安全的(IIS 可以同时处理许多请求),因此这会为您的应用程序的可扩展性造成瓶颈,其次,最好您的服务是无状态的,这包括(我猜)共享资源(或应用程序范围的资源)的使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-13
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        相关资源
        最近更新 更多