wcf - 抛出 CommunicationObjectAbortedException 后恢复回调 channel

标签 wcf nettcpbinding wcf-callbacks

我们有用于扑克桌面游戏的(多个)客户端-(一个)服务器架构。我们正在使用回调 channel 使用回调通知。

但有时由于互联网连接断开,该特定客户端与服务器断开连接,该特定客户端的 WCF channel 也进入故障状态,其位于服务器中的回调 channel 也故障。

设想 :

该客户端正在玩游戏,而互联网连接断开,该游戏停止,他/她的游戏窗口仍然打开,当他/她的互联网连接恢复时,该客户端从服务器中退出,但该玩家的游戏窗口仍然打开并且该玩家可以当他/她的 WCF channel 退出时,不要做任何事情。

我们想在他/她从服务器中退出并抛出“”时关闭该特定客户端的窗口。 CommunicationObjectAbortedException ' 异常(exception)。

我们不能使用以前的 WCF channel 的回调 channel ,因为它处于错误状态。
所以我们尝试在服务器中创建新的回调 channel ,同时使用下面的代码:

操作上下文。 当前 .GetCallbackChannel();

但这里 Current 显示“ NULL ”,因为该播放器的 WCF channel 已中止,因此它会抛出“对象引用未设置为对象实例”的错误。

那么是否有任何解决方案可以使用已中止的 WCF channel 的回调 channel 或恢复该 WCF channel 而不重新初始化它们或使用新 channel 调用该客户端?

最佳答案

我会尝试以下:

  • 在服务器端,当尝试使用故障/中止的 chanel 进行通信时 - 你会失败。
    捕获这个失败,并从列表中删除它的回调(我想你管理一些回调列表)。
  • 在客户端 - 当 chanel Faulted/... 处理时 - 尝试重新打开新的 chanel 到服务器。当这个新的 chenel 将打开时,在服务器端将这个新的回调放回“有效回调”列表。
  • 关于wcf - 抛出 CommunicationObjectAbortedException 后恢复回调 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19538860/

    相关文章:

    c# - WCF Rest 服务 - 获取对 HTTP 响应 header 的访问权限

    c# - 在 Windows 服务中处理 MSMQ 消息

    error-handling - WCF net.tcp 服务器断开连接 - 如何在客户端正确处理?

    wcf - Silverlight WCF netTcpBinding问题

    c# - 双工回调总是匿名的

    javascript - 使用支持 Javascript 的 WCF 进行错误处理?

    c# - 将大型 xml 上传到 WCF REST 服务 -> 400 错误请求

    wcf - BasicHttpBinding 使用传输安全和自签名证书