2013-10-23 61 views
4

我們擁有(多個)客戶端 - (一個)用於撲克桌面遊戲的服務器體系結構。我們使用回調通道使用回調通知。在拋出CommunicationObjectAbortedException後恢復回撥通道

但是有時候因爲網絡連接丟失,這個特殊客戶端會從服務器退出,特定客戶端的WCF通道也會進入虛假狀態,而他在服務器上的回調通道也會失效。

場景:

客戶端是玩遊戲,而網絡連接斷開,那場比賽被停止,仍然是他的遊戲窗口保持打開狀態,當他/她的互聯網連接回來客戶端從服務器斷開了,但該玩家的遊戲窗口仍然打開,該玩家無法做任何事情,因爲他/她的WCF頻道被剔除。

我們希望關閉特定客戶端的窗口,同時將其從服務器中剔除,並拋出'CommunicationObjectAbortedException'異常。

我們不能使用之前的WCF通道的回調通道,因爲它處於失效狀態。 所以我們試圖在服務器中創建新的callbackChannel,同時使用下面的代碼:

OperationContext。 當前 .GetCallbackChannel();

但這裏當前顯示爲「NULL」,因爲該玩家的WCF頻道被中止,所以它拋出了「對象引用未設置爲對象實例」的錯誤。

那麼是否有任何解決方案使用中止的WCF通道的回調通道或恢復該WCF通道,而不重新初始化它們或使用新通道調用該客戶端?

回答

1

我想嘗試以下操作:

  1. 在服務器端,試圖溝通使用故障/香奈兒中止時 - 你會失敗。 趕上這個失敗,並從列表中刪除它的回調(我想你管理一些回調列表)。

  2. 在客戶端 - 當chanel Faulted/...處理 - 嘗試重新打開新的chanel到服務器。當這個新的chenel將被打開時,在服務器端將這個新的回調放回到「有效回調」列表。