延續 InfoQ 新聞《WCF 的問題與 using 區塊》,補充釋放客戶端資源(連接埠、通道)與關閉連接的完整討論。
.NET 非託管資源需實作 IDisposable,using 最便捷。但 using 內拋異常時,資源可能不正確回收,連接持續開啟佔用通道/連接埠。
var client = new MyClient();
try { /*...*/ client.Close(); }
catch (CommunicationException) { client.Abort(); }
catch (TimeoutException) { client.Abort(); }
catch (Exception) { client.Abort(); throw; }
Close() 可能拋 CommunicationException/TimeoutException,Abort() 強制關閉。捕獲 Exception 防禦 OOM 等未知異常。
CloseConnection()Using<T>()MyChannelFactory : IDisposable Wrapper代理模式同理。萬變不離其宗:皆為封裝冗長異常處理,確保資源正確釋放,維護系統安全、效能、穩定。