我正在编写一个 WCF(目前计划中的 netTcpBinding)客户端/服务器应用程序,它必须支持“少数”客户端,包括向客户端发送事件。
我不希望服务器在客户端处理事件时阻塞。
从逻辑上讲,我看不出将回调方法标记为“OneWay”或使用“being_MethodName(..)”调用它们之间的匹配差异
那么每种技术的优缺点是什么?
我从阅读中发现,OneWay 消息的错误处理很复杂,并且您可能会意外地使通道变坏...例如,不会触发并忘记!
我正在编写一个 WCF(目前计划中的 netTcpBinding)客户端/服务器应用程序,它必须支持“少数”客户端,包括向客户端发送事件。
我不希望服务器在客户端处理事件时阻塞。
从逻辑上讲,我看不出将回调方法标记为“OneWay”或使用“being_MethodName(..)”调用它们之间的匹配差异
那么每种技术的优缺点是什么?
我从阅读中发现,OneWay 消息的错误处理很复杂,并且您可能会意外地使通道变坏...例如,不会触发并忘记!
从抽象的合约定义 POV 来看,如果服务器不需要客户端的任何响应,那么就没有理由将其写入与客户端的“合约”中。
在更实际的层面上,您将产生带宽成本和必须发送和接收无关消息的处理开销。
我会担心的另一个主要问题是客户端是否在服务器向客户端发送通知的同一 TCP 通道上向服务器发送消息。如果是这种情况,您肯定希望使用 OneWay 消息以避免可能的死锁(请参阅我在此线程中的评论:WCF 双工通道在使用回调时关闭)。
此外,需要明确的是,单向和异步并不是排他性的——您可以并且很可能应该使用异步模式发送单向消息。例如,如果网络缓冲区已满,单向消息发送可能会被阻塞,因此使用异步将确保您的服务器事件通知线程保持畅通。