【发布时间】:2021-12-12 13:01:41
【问题描述】:
在this tutorial 的“图 5 存储回调引用供以后使用”部分中,很明显,服务需要保持手动缓存列表同步以反映连接的客户端,以防止引用断开连接的旧客户端导致的异常。但是,如果我不打算使用这样的缓存机制(我根本看不到任何需要)并且我直接访问GetCallbackChannel<T> 而不是对客户端执行事件调用,是否可以保证内部列表将只包含所有连接的客户端,并且在调用包含的事件时不会抛出相应的CommunicationException?
【问题讨论】:
-
这个世界上几乎没有保证,在套接字方面更是如此。抓住并继续前进......虽然你真的应该远离 WCF 并转向更现代的技术
-
没有任何保证,即使在您阅读它的时候,客户端没有断开连接,或遭受网络故障怎么办?至于您似乎关注的我评论的第二部分,提出了建议,而且建议很好。要么接受,要么离开它。祝你好运
-
@TheGeneral 如果您可以在两行之间阅读,您就会明白问题点不是严格确保条件的第一部分。你是对的,客户端可能会在没有向服务发送任何通知的情况下断开连接(不确定 WCF 是否甚至确认连接关闭),然后再通过单独的线程(“事件”)调用它们,这是我没有意识到的。关键是要了解即使在这种情况下是否会自然抛出异常(这是程序员的兴趣)。现在更新问题以使其更清晰。
-
可靠性需要比较。 GetCallbackChannel 属性可以获得一个通道,您可以使用该通道在调用服务的客户端实例上调用操作。
-
@Jiaao 感谢您的评论,这让我再次自己调查。请参阅我自己的答案。