我正在使用 WCF 服务来管理在远程计算机上运行的 Windows 服务。我们有一个管理客户端,用于修改 Windows 服务配置,以及实时监控服务状态。对于实时监控,我们每秒轮询服务的状态。
目前,我们在监控服务的同时让客户端始终处于连接状态,但我不断读到建议为每次调用连接和断开连接,就像您对数据库所做的那样。
在我们频繁调用服务的情况下,是否推荐这样做,或者连接和断开连接是否会给流程增加太多开销?
谢谢
最佳答案
默认情况下,作为推荐的最佳实践,您在 WCF 中使用每次调用激活,例如对您的 WCF 服务的每个请求都会获得一个服务类的新实例,该实例会处理您的请求,返回结果,然后进行处理。
在这种情况下,我真的看不出不断中断和重新建立通信 channel 有什么意义(例如,不断地处理和重新创建代理客户端)。 WCF 服务端没有任何内容会“徘徊”在内存中并占用资源或类似的东西。此外,与大多数数据库相反,通常没有“按连接”许可或涉及的任何内容。
在这种情况下,您需要能够处理的情况是您的通信 channel 进入“故障状态”,例如当坏事发生时——当服务调用失败并抛出异常时,或者当网络故障导致您的 channel 中断时。在这种情况下,您需要在客户端有恢复机制来处理这种情况并重新建立连接。
如果您有面向 session 的 WCF 服务,情况可能会有所不同 - 但这些绝对应该是异常(exception),并且只在需要时使用。
关于windows - 您是否应该始终在调用之间断开与 WCF 服务的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809383/