2011-12-11 28 views
2

我們在WCF解決方案上有一個自定義偵聽器,它繼承自ChannelListenerBase<IDuplexSessionChannel>WCF服務 - 處理表現不佳的客戶端?

我們有一個非常乖的客戶(超出我們的控制),這與我們有TCP對話大致如下:

SYN 
SYN,ACK 
RST 

基本上,他們試圖之前在插座上進行操作它已經建立,失敗並關閉了套接字。

在我們的OnEndAcceptChannel代碼中,我們最終無法創建通道,因爲底層套接字在我們到達時已經關閉,我們得到一個SocketException。這似乎殺死了聽衆,阻止了它接受進一步的聯繫。

OnEndAcceptChannel開始,我們嘗試了返回null,拋出異常,以及錯誤偵聽器,以便它可以在調用堆棧上重新啓動。後者是我們發現的唯一解決方案,可以讓頻道有效地繼續收聽,但這種方式具有令人不愉快的(&無法接受的)殺死所有建立的服務連接的副作用。

有人有任何建議如何處理這種情況,不斷傾聽,而不是失去已建立的連接......?

回答

1

我們終於修復了它。我們沒有返回null,而是返回了一個實現IDuplexSessionChannel的虛擬類的實例,它本質上是一個愚蠢的狀態機器,僅此而已 - 無視WCF。