我在WCF中使用net.tcp和Duplex回調發布/訂閱方案。我有一些訂閱該服務的客戶端,並且這可以正常工作。但是,有時一個客戶端會關閉而沒有取消訂閱(客戶端計算機進入休眠狀態,計算機崩潰,網絡連接中止等),當我通過回調列表進行回調時,會引發異常。如何在WCF雙工會話過早關閉時收到通知
現在,我當然可以捕捉異常並刪除有問題的回調,但這對於我來說似乎更像是一種異常情況,並且更像「預期行爲」。
是否有一個事件在連接關閉時被觸發,會通知我,以便我可以從列表中刪除回調?考慮到這是net.tcp而不是HTTP,所以應該知道連接狀態。
很明顯,框架知道連接已關閉並處理,因爲異常是沿着「試圖調用已處理對象」的方式進行的。
編輯:
我應該指出,這不是長期運行的事務。這是發佈/訂閱場景中的長時間運行的連接。基本上,回調函數用於通知臨時訂戶發生各種事件。每個事件都是孤立的,不會長時間運行。
我很好奇你的WCF談話的時間是,如果有可能你的客戶的電腦去睡覺。我非常熟悉WCF,據我所知,Duplex服務並不打算用於長時間運行的持續事務,因爲您遇到了這個問題。 – jrista 2009-08-24 04:03:36
'爲什麼'設計'以及它經常用來做什麼往往是完全不同的。我需要長時間運行的連接,在此連接中,我利用心跳消息來保持連接活着。由於WCF爲長時間運行的連接不提供其他選項,因此我必須對此作出適當的限制,或者重寫我的應用程序以不使用WCF。 – 2009-08-24 04:18:14