2016-01-21 102 views
2

我有一個WCF服務器,它使用雙工模型維護對客戶端回調的引用。WCF客戶端關閉事件未被觸發

如果我直接關閉該服務器上的回調連接:

ICallBack callBack = OperationContext.Current.GetCallbackChannel<ICallBack>(); 
callBack.Close() 

客戶端無法通過訂閱任接收此事件的通知:執行

client.InnerChannel.Closed += Handler; 
client.InnerDuplexChannel.Closed += Handler; 

無論是事件處理程序。

然而,如果我改變回調至Abort而不是在服務器側的Close,客戶端接收的Faulted處理程序的通知,然後隨後的Closed處理程序。如此放棄正常工作。

我檢查回調是處於有效狀態,那麼,爲什麼在客戶端上接收AbortFaulted通知,而不是CloseClosing通知? Close之後的回調狀態爲Closed

根據MSDN documentation使用Close優雅地關閉回調連接將是我更喜歡的選擇,而不是更突然的Abort

回答

0

因爲你將它轉換爲你自己的接口,我認爲它實現了Close(),這不會引發WCF事件。

你需要這樣做:

IClientChannel pClientChannel = (IClientChannel) callback; 
pClientChannel.Close(); 

多數民衆贊成簡化。你真的應該做try/catch Close/Abort模式。如果關閉不起作用,請致電放棄。