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

WCF 分散式事務完整指南:TransactionFlow、WS-AT 與 MSDTC 實作

     編輯:關於.NET

WCF 事務機制建立在 System.Transactions 之上,支援本地與分散式事務。分散式事務仰賴 MSDTC (Microsoft Distributed Transaction Coordinator) 協調跨服務、跨資料庫的兩階段提交 (2PC)。

事務協定比較

協定傳輸跨防火牆異構平台適用綁定
LightweightAppDomain 內否否無預設綁定支援
OleTxRPC / 二進位否否NetTcpBinding, NetNamedPipeBinding
WS-AtomicTransaction (WS-AT)HTTP / XML是是WSHttpBinding, WSDualHttpBinding 等

設定範例:<binding transactionFlow="true" transactionProtocol="WSAtomicTransactionOctober2004" />

事務管理器層級提升

  • LTM (Lightweight Transaction Manager):單一 AppDomain 內,效能最佳。
  • KTM (Kernel Transaction Manager):Vista+ 核心元件,支援易失性資源管理員。
  • DTC (MSDTC):跨機器、跨資源管理員 (SQL Server、MQ、檔案系統),支援 OleTx 與 WS-AT。

當事務跨越服務邊界或涉及多個持久資源,會自動從 LTM 提升至 DTC。

三種事務流模式設定

模式Binding transactionFlowOperation TransactionFlowOperationBehavior
Client/Service 共同參與 (最常用)trueAllowedTransactionScopeRequired=true
強制 Client 發起trueMandatoryTransactionScopeRequired=true
Service 獨立事務falseNotAllowedTransactionScopeRequired=true

服務端實作關鍵碼

[ServiceBehavior(TransactionTimeout = "00:30:00", InstanceContextMode = InstanceContextMode.PerCall)]
public class WCFService : IWCFService
{
    [OperationBehavior(TransactionScopeRequired = true)]
    [TransactionFlow(TransactionFlowOption.Allowed)]
    public bool AddData(string name)
    {
        using (var scope = new TransactionScope())
        {
            try
            {
                // DB 操作
                if (name.Length > 8) throw new Exception("名稱過長");
                scope.Complete(); // 提交
                return true;
            }
            catch
            {
                // 自動回滾 (或 Transaction.Current.Rollback())
                return false;
            }
        }
    }
}

部署注意事項

  1. 伺服器與用戶端皆需啟用 MSDTC 服務,設定「網路 DTC 存取」、「允許輸入/輸出」、「無驗證」或「相互驗證」。
  2. 防火牆需開放 RPC 動態埠範圍 (預設 135, 445 及動態高埠) 或改用 WS-AT (HTTP 80/443)。
  3. TransactionScope 預設隔離級別為 Serializable,高併發下易造成死鎖,可考慮 TransactionScopeOption.RequiresNew 或調整隔離級別。

總結

WCF 透過標準化協定 (WS-AT) 與 Windows 基礎設施 (MSDTC) 實現強一致性分散式事務。正確選擇協定、配置事務流屬性、處理提升邏輯,是建置可靠分散式系統的關鍵。

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