【问题标题】:Should you always disconnect from a WCF service between calls?您是否应该始终在调用之间断开与 WCF 服务的连接?
【发布时间】:2011-01-26 20:00:47
【问题描述】:

我正在使用 WCF 服务来管理在远程计算机上运行的 Windows 服务。我们有一个管理客户端,用于修改 Windows 服务配置,以及实时监控服务的状态。对于实时监控,我们每秒轮询服务的状态。

目前,我们在监控服务的同时始终保持客户端连接,但我不断阅读建议在每次调用时连接和断开连接,就像您对数据库所做的那样。

在我们频繁调用服务的情况下是否建议使用它,或者连接和断开连接会给流程增加太多开销?

谢谢

【问题讨论】:

    标签: windows wcf connection service


    【解决方案1】:

    默认情况下,作为推荐的最佳实践,您在 WCF 中使用每次调用激活,例如对 WCF 服务的每个请求都会获得一个服务类的新实例,该实例会处理您的请求,返回结果,然后被释放。

    在这种情况下,我真的认为不断中断和重新建立通信渠道(例如,不断地处理和重新创建代理客户端)没有任何意义。 WCF 服务端没有任何东西会在内存中“徘徊”并占用资源或类似的东西。此外,与大多数数据库相反,通常没有“按连接”许可或任何相关内容。

    在这种情况下,您需要能够处理的情况是您的通信渠道进入“故障状态”,例如当发生不好的事情时——当服务调用失败并引发异常时,或者当网络侥幸导致您的通道中断时。在这种情况下,您需要在客户端具有恢复机制来处理此问题并重新建立连接。

    如果您有面向会话的 WCF 服务,情况可能会有所不同 - 但那些绝对应该是例外,并且仅在需要时才使用。

    【讨论】:

    • 我认为在 PerCall 实例化(和基于 http 的绑定)的情况下,您甚至不需要处理重新建立连接。通道本身不是连接,在这种配置的情况下,它是完全无状态的,因此先前调用的异常不会影响后续调用 - 代理仍然可用。
    • @ladislav mrnka:是的,是的 - 但如果您的通话失败,例如网络中断或类似情况,您的客户端代理将“出现故障”,需要重新创建。
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2018-02-12
    • 2020-02-24
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2017-01-12
    • 2020-06-23
    相关资源
    最近更新 更多