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

WCF 服務設計規範(四):操作、呼叫與錯誤處理完整指南

     編輯:關於.NET

操作與呼叫

  1. 單向調用 ≠ 非同步調用:單向僅表示不等待回應,不代表非同步執行。
  2. 單向調用 ≠ 並發調用:不具備並發語意。
  3. 單向操作仍可能拋出例外:用戶端需處理通道錯誤。
  4. 單向調用亦啟用可靠傳輸:有序傳遞為選配。
  5. 會話服務避免單向操作;若必要,設為終止操作:
    [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)]
    void MyMethod2();
    
  6. 回調契約命名慣例:服務契約名 + Callback 後綴。
  7. 回調操作盡量標記為單向。
  8. 回調契約專用於回調,勿混用。
  9. 避免在同一回調契約混用一般回調與事件。
  10. 事件操作設計規範:void 回傳、無 out 參數、標記單向。
  11. 事件管理優先使用發布-訂閱框架,避免原始回調契約。
  12. 提供明確的回調建立與拆除方法(Connect/Disconnect)。
  13. 使用型別安全的 DuplexClientBase<T,C> 替代 DuplexClientBase<T>。
  14. 同理使用 DuplexChannelFactory<T,C> 替代 DuplexChannelFactory<T>。
  15. WSDualHttpBinding 調試/內網部署時,套用 CallbackBaseAddressBehavior(CallbackPort = 0)。

錯誤處理

  1. 例外發生後切勿重用 Proxy 執行個體,即使已捕獲例外:通道可能已進入 Faulted 狀態。
  2. 優先讓 WCF 自動遮蔽錯誤,避免過度定義 FaultContract。
  3. 例外後勿重用回調通道,同樣因通道可能 Faulted。
  4. FaultContract 標註於例外類別,而非單純可序列化型別:
    [FaultContract(typeof(DivideByZeroException))] // 正確
    [FaultContract(typeof(double))] // 避免
    
  5. IErrorHandler.ProvideFault 避免冗長處理(如大量日誌)。
  6. 除錯階段服務與回調類別設 IncludeExceptionDetailInFaults = true(組態或程式碼皆可)。
  7. Release 版本不回傳未知例外為錯誤,除非診斷場景。
  8. 考慮在服務套用 ErrorHandlerBehavior 統一將例外提升為錯誤契約並自動記錄日誌。
  9. 回調用戶端同理考慮 CallbackErrorHandlerBehaviorAttribute。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved