windows - 您是否应该始终在调用之间断开与 WCF 服务的连接?

标签 windows wcf connection service

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

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

在我们频繁调用服务的情况下,是否推荐这样做,或者连接和断开连接是否会给流程增加太多开销?

谢谢

最佳答案

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

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

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

如果您有面向 session 的 WCF 服务,情况可能会有所不同 - 但这些绝对应该是异常(exception),并且只在需要时使用。

关于windows - 您是否应该始终在调用之间断开与 WCF 服务的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809383/

相关文章:

windows - 如何在嵌套循环批处理脚本中打破内部循环

linux - Windows 与 Linux 上的 svn 差异

c++ - 通过 c/c++ 中的 tcp 套接字发送时数据被切断

wcf - 没有端点监听 net.pipe 异常

asp.net - 具有Subsonic 3的OData(WCF数据服务)

Windows 7、加速度计和其他传感器

c# - WCF:如何为类型中的类型构造 DataContract

C套接字编程未输入端口

database - Yii2 如何在没有配置文件的情况下连接到数据库?

mysql - 使 PDO 数据库连接在 Controller 和模型中可用