由于工作需要,最近研究了一下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 }
View Code

相关文章: