序言
完整編碼規範對專案成功至關重要。它強化最佳實踐、避免錯誤、利於團隊知識傳承。傳統規範動輒百頁、理論冗長,開發人員難以內化。Juval Lowy 的《WCF 編碼標準》僅十餘頁,直指「是什麼」與「為什麼」。深刻理解每條規則需大量閱讀與多年經驗,新人入職前可先遵守規範,再逐步領會精髓。本文件涵蓋常用規則、缺陷避坑、指南與建議,並引用《WCF Master Class》與《Programming WCF Services》中的最佳實踐與輔助類別。
通用設計準則
所有服務必須遵守
- 服務安全
- 操作讓系統保持一致狀態
- 執行緒安全、支援並發用戶端
- 服務可靠
- 服務健壯
服務可選擇遵守
- 跨平台互通
- 規模不變性(可伸縮)
- 高可用性
- 快速回應
- 規律運作、不長時間阻塞用戶端
設計要點
- 服務代碼置於類別庫,而非宿主 EXE:利於重用與測試。
- 服務類別不提供參數化建構函數,除非為明確宿主的單例。
- 相關繫結啟用可靠傳輸。
- 契約賦予有意義命名空間:對外服務用公司 URL + 年月(如
https://www.idesign.net/2009/06);內網用唯一名稱(如 MyApplication)。
- 內網應用 WAS 不可用時,優先自宿主而非 IIS。
- 不可混用具名繫結與預設繫結:要麼全顯式引用,要麼全用預設。
- 同理不可混用具名行為與預設行為。
- 用戶端組態檔中所有端點必須命名。
- 勿用 SvcUtil 或 VS2010 產生組態檔:工具預設值(逾時、訊息大小等)藏藏部署風險,應手動調整。
- 工具產生 Proxy 後務必清理:實作
IDisposable 釋放非託管資源。
- 勿重複 Proxy 代碼:多用戶端共用契約時,將 Proxy 提煉至獨立類別庫(DLL)供引用。
- 永遠關閉或銷毀 Proxy:
Close() 或 using 區塊,釋放網路連線等寶貴資源。
- 使用服務發現時優先動態位址:發揮動態定位優勢。
- 服務發現需暴露 TCP 中繼資料交換端點:適用內網 Ad-Hoc 模式,提速。
- 服務發現避免不確定基數:明確指定
FindCriteria.MaxResults = 1。