抛出CommunicationObjectAbortedException后恢复回调通道

时间:2013-10-23 10:14:04

标签: wcf nettcpbinding wcf-callbacks

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

但有时由于互联网连接中断,该特定客户端被从服务器中删除,而该特定客户端的WCF频道也进入了淡化状态,而位于服务器中的回调频道也被淡化。

场景:

该客户正在玩游戏,而互联网连接中断,游戏停止,他的游戏窗口仍然打开,当他/她的互联网连接恢复时,客户端从服务器中退出,但该玩家的游戏窗口仍然打开,该玩家无法做任何事情,因为他/她的WCF频道被淘汰。

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

我们无法使用之前的WCF频道的回调频道,因为它处于无效状态。 所以我们尝试在服务器中创建新的callbackChannel,同时使用下面的代码:

的OperationContext 当前 .GetCallbackChannel();

但是,当播放器的WCF频道被中止时,当前显示“ NULL ”,因此它会抛出“对象引用未设置为对象实例”的错误。

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

1 个答案:

答案 0 :(得分:1)

我会尝试以下:

  1. 在服务器端,当尝试使用故障/中止的chanel进行通信时 - 您将失败。 抓住这个失败,并从列表中删除它的回调(我想你管理了一些回调列表)。

  2. 在客户端 - 当chanel Faulted / ...处理时 - 尝试重新打开新的chanel到服务器。当这个新的chenel打开时,在服务器端将这个新的回调放回“有效的回调”列表。