【问题标题】:WCF - Is GetCallbackChannel reliable?WCF - GetCallbackChannel 可靠吗?
【发布时间】:2021-12-12 13:01:41
【问题描述】:

this tutorial 的“图 5 存储回调引用供以后使用”部分中,很明显,服务需要保持手动缓存列表同步以反映连接的客户端,以防止引用断开连接的旧客户端导致的异常。但是,如果我不打算使用这样的缓存机制(我根本看不到任何需要)并且我直接访问GetCallbackChannel<T> 而不是对客户端执行事件调用,是否可以保证内部列表将只包含所有连接的客户端,并且在调用包含的事件时不会抛出相应的CommunicationException

【问题讨论】:

  • 这个世界上几乎没有保证,在套接字方面更是如此。抓住并继续前进......虽然你真的应该远离 WCF 并转向更现代的技术
  • 没有任何保证,即使在您阅读它的时候,客户端没有断开连接,或遭受网络故障怎么办?至于您似乎关注的我评论的第二部分,提出了建议,而且建议很好。要么接受,要么离开它。祝你好运
  • @TheGeneral 如果您可以在两行之间阅读,您就会明白问题点不是严格确保条件的第一部分。你是对的,客户端可能会在没有向服务发送任何通知的情况下断开连接(不确定 WCF 是否甚至确认连接关闭),然后再通过单独的线程(“事件”)调用它们,这是我没有意识到的。关键是要了解即使在这种情况下是否会自然抛出异常(这是程序员的兴趣)。现在更新问题以使其更清晰。
  • 可靠性需要比较。 GetCallbackChannel 属性可以获得一个通道,您可以使用该通道在调用服务的客户端实例上调用操作。
  • @Jiaao 感谢您的评论,这让我再次自己调查。请参阅我自己的答案。

标签: c# wcf


【解决方案1】:

抱歉,我没有看到 here 上面写的:

获取调用当前客户端实例的通道 操作。

这立即导致first tutorial 的“图 5 存储回调引用以供以后使用”部分现在有意义,因为我们将调用客户端(实际上支持多个)另一个线程(因此推迟到他们的请求)。我认为GetCallbackChannel 只是代表服务执行的任何时候的整个确认回调(每个客户端一个)。

我明白,一旦我模仿了缓存列表方法(或者只是 Exception),我自然必须捕获诸如 CommunicationException 之类的异常。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2011-07-27
    • 2012-03-05
    • 2013-01-18
    • 2011-08-26
    • 2011-01-08
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多