【问题标题】:WCF Self-hosted service, client clean-up on service stopWCF 自托管服务,服务停止时客户端清理
【发布时间】:2009-02-03 22:13:18
【问题描述】:

我很想知道如何将我的服务设置为在将安装该服务的服务器上完全停止。例如,当我每分钟有很多客户端连接并进行操作时,我想关闭服务进行维护,如何在服务的“OnStop”事件中执行此操作,然后让主服务主机拒绝任何新的客户端连接并让当前连接在它实际关闭其对客户端的服务之前完成,这将确保服务器关闭时服务器上的数据不会损坏。

现在我没有设置为单例,因为我需要服务的可扩展性。因此,我必须以某种方式让我的服务主机独立于知道创建了多少个服务类实例来执行此操作。

【问题讨论】:

    标签: vb.net wcf windows-services


    【解决方案1】:

    您只需在您创建的 ServiceHost 实例上调用 Dispose。一旦你这样做了,你将不再接受任何客户端,并且服务将继续为已经连接的客户端完成操作。

    【讨论】:

    • 会在“serviceHost.Dispose()”之前调用“serviceHost.Close()”,还是我只需要“serviceHost.Dispose()”,因为它会处理 .Close?
    • @Sentax:它们是一样的。你可以打电话/或打电话。
    • 我的 serviceHost 没有 .Dispose 方法,我在 OnStop 事件中调用了 .Close 方法。当客户端连接并执行操作时我尝试了此操作,但它仍然关闭服务器并且客户端尚未断开连接。
    • @Sentax:ServiceHost 实现了 IDisposable,它有一个 Disposable 方法。关闭服务时,您可能会遇到超时到期的问题。如果你想强制中止,那么你必须在服务主机上中止(应该有一个Abort方法)。
    【解决方案2】:

    我一直在想同样的事情。我发现这篇文章对如何正确关闭/处置为 ServiceHost 或客户端进行了非常深入的描述。

    http://www.danrigsby.com/blog/index.php/2008/02/26/dont-wrap-wcf-service-hosts-or-clients-in-a-using-statement/

    【讨论】:

      【解决方案3】:

      为了实现这一点。我必须创建自己的服务引用,并在 Windows 服务 OnStop 中启动新连接并更改 WCF 服务中的值以“关闭”(这只是服务在线或离线的共享布尔值)服务如此新客户端将无法连接(客户端将调用以查看服务器是否在线或离线的函数)并且现有连接将有时间完成,然后在所有客户端断开连接后,继续使用关闭 WCF 服务.Close 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-30
        • 1970-01-01
        • 2010-10-15
        相关资源
        最近更新 更多