2016-05-05 103 views
0

我想知道當客戶端中止連接時WCF服務器的後果是什麼。例如,我知道服務器將繼續處理請求。但之後會發生什麼?當服務器嘗試向客戶端發送響應時會發生什麼?客戶端中止連接時WCF服務器的後果

  • 服務器會嘗試一次並放棄或嘗試多次嗎?這是可配置的嗎?
  • 服務器將嘗試將響應發送到客戶端多長時間?服務器會立即知道有什麼地方出現問題,或者它會坐在那裏等待客戶端確認它永遠不會收到什麼?這是可配置的嗎?
  • 當服務器最終放棄時會在服務器上拋出異常嗎?
  • 是否有任何其他的副作用會很好地被意識到?

在我的情況下,我使用的是HTTP綁定。其他綁定有什麼不同?另外,當我說客戶端中止連接時,我正在討論諸如致電client.Abort();之類的東西。如果客戶端連接「異常」中止,它是否會改變任何內容我從客戶端機器拔下網線?

回答

0

假設您在這裏沒有回調功能: 如果客戶端與服務器斷開連接,服務器上將不會有任何異常。如果服務器服務在perclient模式下運行,則服務對象不會立即銷燬。在percall模式下,您可以實現IDisposable在調用結束後立即清除所有資源,因爲對象將被銷燬。 由於客戶端和服務器之間的通道將被破壞,服務器上沒有重試方法來繼續嘗試將數據發送到客戶端。

在回撥模式下,您將擁有客戶端通道,您可以檢查客戶端是否已連接,或者您是否嘗試使用該通道,它將通過異常。然後,您可以從列表中刪除頻道,因爲您可以在發生故障的頻道上重新呼叫。

如果服務在全雙工模式下運行,則不要調用client.abort(),因爲這將創建另一個服務實例。所以它在這種模式下沒有用處。