我正在编写一个WCF(目前计划的netTcpBinding)客户端/服务器应用程序,它必须支持“少数”客户端,包括向客户端发送事件。
我不希望服务器阻止 客户处理事件时。
逻辑上我看不到将回调方法标记为“OneWay”或用“being_MethodName(..)”调用它们之间的匹配差异
那么每种技术的优缺点是什么?
我从读物中发现,OneWay消息的错误处理很复杂,你可能会意外地让频道变坏......例如,不是火,忘了!
答案 0 :(得分:0)
从抽象合同定义POV,如果服务器不需要客户端的任何响应,则没有理由将其写入与客户的“合同”。
在更实际的层面上,您将产生带宽成本和处理必须发送和接收无关消息的开销。
另一个主要问题是客户端是否在服务器向客户端发送通知的同一TCP通道上向服务器发送消息。如果是这种情况,您肯定希望使用OneWay消息以避免可能的死锁(请参阅此帖子中的评论:WCF duplex channel gets closed when using callbacks)。
另外,要清楚,单向和异步不是独占的 - 您可以并且可能应该使用异步模式发送单向消息。单向消息可以发送到阻止,例如,如果网络缓冲区已满,那么使用async将确保您的服务器事件通知线程保持解除阻塞状态。