由于工作需要,最近研究了一下WCF分布式事务方面的技术,自己做了一个基于OleTx协议的WCF事务实例,供大家参考。
一、实例背景
本实例以大家熟悉的银行转账业务为背景,在几台不同的机器上部署一套基于OleTx协议的WCF分布式服务。
本例需要A、B、C、D四台计算机,其中A表示SqlServer服务器,B部署取款服务,C部署存款服务,D部署客户端程序(调用存款和取款服务),D同时直接A进行日志写入。一次转账操作分为三个部分:存款、取款、写日志,这三部分组成一个转账事务,要么全部成功,要么全部失败。
二、WCF服务端代码
创建一个WCF服务项目OleTxService。
1、契约
取款服务契约如下:
1 using System.Net.Security; 2 using System.ServiceModel; 3 using OleTxService.Models; 4 5 namespace OleTxService 6 { 7 /// <summary> 8 /// 取款服务接口 9 /// </summary> 10 [ServiceContract(SessionMode = SessionMode.Required)] 11 public interface IWithDrawService 12 { 13 /// <summary> 14 /// 取款操作 15 /// </summary> 16 /// <param name="accountId">取款账号</param> 17 /// <param name="amount">取款金额</param> 18 [OperationContract] 19 [TransactionFlow(TransactionFlowOption.Mandatory)] 20 [FaultContract(typeof(MyFault), ProtectionLevel = ProtectionLevel.None)] 21 void Withdraw(string accountId, double amount); 22 } 23 }