如何在開發初期即找到程式中有呼叫 WCF 或是 SqlConnection 沒有關閉

這幾年來常常因為客戶的交易系統發生問題而被緊急呼叫到現場處理, 也常是在深夜時候被抓去.

分析到最後, 常是因為資源沒有正常的釋放, 如 Web Server 去呼叫 AP Server 的 WCF 程式沒有關閉連線 或是 資料庫操作沒有關閉連線

我常在想一定要這麼辛苦嗎? 為什麼不在開發的時候就即早發現問題, 不要讓這些不定時炸彈到正式環境後才爆炸.

有一個很簡單且方便的方法: Visual Studio 內建的 靜態程式碼分析 (Static Code Analysis)

步驟如下:

1. 我新增一個 WCF 專案及 Console Appliction, 並在 Console Application 參考 WCF 服務

clip_image002

2. 在 Console Application 專案屬性頁中, 程式碼分析 => 選擇 Microsoft 所有規則 (也可以自行調整規則集內容)

clip_image004

3. 在專案上右鍵 => 分析 => 執行程式碼分析

clip_image006

4. 會看到一個 CA2000 的規則, 它指出呼叫 WCF 的程式並未關閉. 即模擬之前的問題.

image

如果您在看這篇文章請在看完後, 請試著在開發時就導入. 你可以不會覺得有很明顯的不同, 但確實執行一段時間後, 你會發現被呼叫的次數及頻率變少了.