1

我有一个双工 WCF 服务,它依赖于服务和客户端之间的一致命名管道连接。这是一种发布/订阅系统,客户端在服务上调用订阅并被放入订阅列表中。然后,服务调用它自己的某些更新方法,这些方法将通过回调将更新推送到客户端。

我已将 netnamedpipebinding 的 recieveTimeout 设置为“无限”。我可以合理地依赖此连接永远打开吗?更重要的是,是否存在通道在超时之外发生故障的情况?

由于命名管道只是一个共享内存位置,除了硬件问题之外,我想不出它会持续失败的许多原因。此外,没有太多方法可以保证在一定间隔内进行 ping 之外的连接。

顺便说一句,我的直觉是避免同时使客户端成为 WCF 服务。我知道这不是一个真正的循环依赖,但它只是感觉很恶心。然而,我对那些告诉我我只是偏执的人持开放态度,这种模式是可以的。

4

1 回答 1

3

你永远不能依赖连接。服务上的单个未处理的异常/故障将关闭通道。我认为您应该在客户端处理 Closed 和 Faulted 事件,或者通过代理重新创建和重新订阅实现 ping 机制。

使用双工通信时,您只需要客户端公开合同 - 它与公开服务不同,因为客户端不公开端点。由于命名管道在设计上是双工的,因此通信是通过从客户端到服务创建的单通道执行的。每次您希望通过某些传输进行双工通信时,您都需要在客户端上进行一些处理代码。

于 2011-01-22T16:35:37.603 回答