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

WCF 服務設計規範(五):交易與並發管理核心準則

     編輯:關於.NET

交易

  1. 切勿手動管理交易:交由 WCF 基礎設施處理。
  2. TransactionFlow 屬性標註於契約介面,而非服務類別。
  3. 服務建構函數內不執行交易工作。
  4. 服務採用 Client 或 Client/Service 交易模式:避免 None 或 Service 模式。
  5. 回調採用 Service 或 Service/Callback 交易模式:避免 None 或 Callback 模式。
  6. Client/Service 或 Service/Callback 模式下,以 BindingRequirement 限制繫結必須支援交易流動。
  7. 用戶端捕獲 None 或 Service 交易模式服務拋出的所有例外。
  8. 即使使用交易,亦啟用可靠傳輸與有序傳遞。
  9. 交易操作中捕獲例外,切勿手動 Transaction.Current.Rollback():應直接重新拋出原例外或新例外,讓基礎設施自動回滾。
  10. 交易操作捕獲例外必須重新拋出。
  11. 保持交易短小:減少鎖定爭用與逾時風險。
  12. 採用預設隔離等級 IsolationLevel.Serializable。
  13. 交易內不呼叫單向操作。
  14. 交易內不呼叫非交易服務。
  15. 交易內不存取非交易資源(如檔案系統)。
  16. 會話服務避免將會話邊界等同交易邊界(依賴 session close auto-complete)。
  17. 會話服務優先使用 TransactionalBehavior 管理交易:
    [Serializable]
    [TransactionalBehavior]
    class MyService : IMyContract { public void MyMethod() { ... } }
    
  18. 會話/交易單例服務使用易失性資源管理器管理狀態,避免顯式狀態感知編程或依賴 WCF 實例完成時停用。
  19. 持久交易服務必須設 SaveStateInOperationTransaction = true 將交易傳播至存儲。

並發管理

  1. 對下列資源始終提供執行緒安全存取:
    • 會話/單例服務的記憶體狀態
    • 回調期間用戶端記憶體狀態
    • 共享資源
    • 靜態變數
  2. 預設推薦 ConcurrencyMode.Single:零成本獲得執行緒安全與交易存取。
  3. 單一模式下的會話/單例服務操作保持短小,避免長時間阻塞其他用戶端。
  4. 使用 ConcurrencyMode.Multiple 時,必須啟用交易自動完成。
  5. Per-Call 服務考慮用 ConcurrencyMode.Multiple 允許並發調用。
  6. 交易單例服務若用 ConcurrencyMode.Multiple,必須設 ReleaseServiceInstanceOnTransactionComplete = false:
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
      ConcurrencyMode = ConcurrencyMode.Multiple,
      ReleaseServiceInstanceOnTransactionComplete = false)]
    class MySingleton : IMyContract { ... }
    
  7. 切勿在 UI 執行緒自我裝載服務;UI 僅調用服務。
  8. 服務回調 UI 應用程式時,必須透過 SynchronizationContext.Post() 執行。
  9. 代理同時提供同步/非同步方法時,FaultContract 僅標註於同步方法。
  10. 非同步操作保持短小;勿將非同步等同於冗長操作。
  11. 勿混用交易與非同步調用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved