首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 中的 Dispose 模式:正確釋放客戶端資源

     編輯:關於.NET

延續 InfoQ 新聞《WCF 的問題與 using 區塊》,補充釋放客戶端資源(連接埠、通道)與關閉連接的完整討論。

核心問題

.NET 非託管資源需實作 IDisposable,using 最便捷。但 using 內拋異常時,資源可能不正確回收,連接持續開啟佔用通道/連接埠。

最佳實踐:try/catch 取代 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 等未知異常。

三種封裝實作(同 14660)

  1. 擴展方法 CloseConnection()
  2. Lambda 靜態 Using<T>()
  3. 自訂 MyChannelFactory : IDisposable Wrapper

代理模式同理。萬變不離其宗:皆為封裝冗長異常處理,確保資源正確釋放,維護系統安全、效能、穩定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved