2009-09-13 25 views
3

基於文檔和文章建議,如果遇到意外的異常/故障調用中止()上的客戶端代理。參見以下(簡化):能針對IClientChannel代理調用中止()拋出一個異常?

MyServiceClient proxy = null; 
try { 
    proxy = new MyServiceClient(); 
    proxy.DoSomething(); 
    proxy.Close(); 
} catch (Exception ex) { 
    if (proxy != null) 
     proxy.Abort(); 
} 

是否有任何調用Abort()拋出異常本身的可能性?對Abort()的調用應該在它自己的try/catch中嗎?

+0

爲什麼你在這段代碼中有空檢查? – 2009-09-13 22:13:00

+1

我打算在try塊中放置代理的實例。因此,在任何情況下出現實例化錯誤時進行空檢查。可能是一個矯枉過正的,但保證我有一個代理Abort。 – Elan 2009-09-15 02:53:36

回答

3

否,中止不會失敗(但.Close()或.Dispose(可能))。調用.Abort()是「大錘」的方式來終止通道 - 它只是推倒,無論正在進行的短信處理。

只有認真使用它 - 例如,在調用.Close()失敗時發生異常catch事件。這是真正的目的和正確的使用。

Marc

+2

如果你不叫放棄在上面catch塊的通道上,會發生什麼? – 2009-09-13 22:10:54

+2

客戶端和服務器之間的通道不能正確關閉和處理,因此您的系統中可能會存在未使用的通道。最終,它會被垃圾收集 - 但這需要一些時間,並且在那之前,它將使用系統資源來達到無用的目的。 – 2009-09-14 04:49:05

+0

您是否有任何提及備份此聲明?我想確保Abort在任何情況下都不會拋出任何異常。 – 2012-04-19 01:34:26