在完成了对于WCF事务编程(《上篇》、《中篇》、《下篇》)的介绍后,本篇文章将提供一个完整的分布式事务的WCF服务应用,通过本例,读者不仅仅会了解到如何编程实现事务型服务,还会获得其他相关的知识,比如DTC和AS-AT的配置等。本例还是沿用贯通本章的应用场景:银行转帐。我们将会创建一个BankingService服务,并将其中的转帐操作定义成事务型操作。我们先从物理部署的角度来了解一下BankingService服务,以及需要实现怎样的分布式事务。

既然是实现分布式事务,那么事务会跨越多台机器。简单起见,我使用两台机器来模拟。有条件的读者可以在自己的局域网中进行练习,如果你没有局域网可用,你可以使用虚拟机来模拟局域网。假设两台机器名分别是Foo和Bar,整个应用的物理拓扑结构如图1所示。

WCF技术剖析之三十二:一步步创建一个完整的分布式事务应用

图1 BankingService物理部署拓扑

BankingService和客户端部署与主机Foo,定义在BankingService的转账的两个子操作“提取(Withdraw)”和“存储(Deposit)”通过调用部署于主机Bar的同名服务(WithdrawService和DepositService)实现。而WithdrawService和DepositService最终实现对存储于数据库(这里是SQL Server)的数据进行修改,MSSQL部署与主机Bar中。实际上,整个应用主要涉及到对三个服务(BankingService、WithdrawService和DepositService)的实现,我们先来看看服务契约和服务的实现。

步骤1:服务契约和服务的实现

我们仍然采用契约共享的方式将服务契约定义在单独的项目之中,共服务端和客户端共享。涉及到的三个服务对应的服务契约定义如下,事务型操作的TransactionFlow选项被设置为Allwed(默认值)。

IBankingService:

using System.ServiceModel;
namespace Artech.TransactionalService.Service.Interface
   3: {
)]
interface IBankingService
   6:     {       
   7:         [OperationContract]
   8:         [TransactionFlow(TransactionFlowOption.Allowed)]
double amount);
  10:     }
  11: }

相关文章:

  • 2021-10-14
  • 2021-08-24
  • 2021-07-01
  • 2021-06-24
  • 2021-10-06
  • 2022-12-23
  • 2021-12-24
猜你喜欢
  • 2021-10-15
  • 2021-03-31
  • 2021-12-31
  • 2022-12-23
  • 2021-04-05
相关资源
相似解决方案