WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程

今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程。众所周知,应用系统开发过程中,事务是一个重要的概念。它是保证数据与服务可靠性的重要机制。作为面向服务应用的开发平台,WCF也提供了对事物编程模型的支持。.NET 2.0提供的System.Transactions类来开发事务应用程序。同样WCF也支持事务特性,WCF事务机制是什么,它与微软已有的技术如Microsoft 分布式事务协调器 (MSDTC)有何关系?与Enterpise Services(微软应用程序服务器技术)和COM+的事物机制有何区别,这篇文章会详细介绍,今天我们就来学习一下WCF事务处理机制和如何在项目中使用这一特性。全文的结构【1】事务概念 【2】事务属性、【3】事务协议、【4】事务管理器、【5】事务编程、【6】示例代码讲解、【7】总结。

WCF提供的事务机制。其实除了利用已有的.NET 框架提供的事务机制外,还根据自身需求进行了扩展。这个问题不难理解。WCF编程模型告诉我们,WCF的应用通常包含客户系统、WCF服务系统。除了可以借助SQL Server等RDBMS内部的事务机制来实现事务以外,还可以使用NET 2.0提供的System.Transactions类来实现事务处理。这种事务仅仅存在于服务端或者客户端。而WCF要求通常要实现客户端与多个服务端之间操作的事务约束,也就是通常所说的分布式事务。WCF没有完全重新开发一套框架来实现分布式事务。这里它借助了微软早期的技术MSDTC分布式事务协调器来实现的分布式事务。下面我们也会介绍。

首先我们来回顾一下事务的感念:

【1】事务概念 :

什么是事务呢?其实这个事一个数据库系统中的一个概念。事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

例如,银行转帐:通常包括两个操作:

(1)从一个帐号A扣款;

(2)使另一个帐号B增款。

这两个操作要么都执行,要么都不执行。在银行系统里,数据库系统执行相关的命令来完成两个操作。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保证数据一致性。连个账号的金额不会出现错误。保证转账操作的正确完成。

【2】事务属性:

事务也有自己的特性。这个大家都非常的熟悉。相信每个数据库相关的书籍都会介绍事务的特性ACID。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性:

<1>原子性:

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。一个事务要被完全的无二义性的做完或撤消。在任何操作出现一个错误的情况下,构成事务的所有操作的效果必须被撤消,数据应被回滚到以前的状态。比如转账事务中的两个操作,要么全执行,要么全部执行。

<2>一致性:

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制所有已知的完整性约束。例如,A账户里10000元,B账户0元,转账成功以后。A和B账户的总额保持不变。还是10000元。不会因为转账成功就增加了总额。

<3>隔离性:

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。当事务可序列化时将获得最高的隔离级别。在此级别上,从一组可并行执行的事务获得的结果与通过连续运行每个事务所获得的结果相同。串行执行事务:在一个事务执行过程中,数据的中间的(可能不一致)状态不应该被暴露给所有的其他事务。

两个并发的事务应该不能操作同一项数据。数据库管理系统通常使用锁来实现隔离。

<4>持久性:

WCF 支持分布式事务,也就是说事务可以跨越服务边界、进程、机器、网络,在多个客户端和服务之间存在。而与此对应的事务数据信息传播和管理的协议不同。

时间: 2024-11-03 09:34:05

WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程的相关文章

WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ

之前曾经写过一个关于MSMQ消息队列的文章:WCF分布式开发必备知识 (1):MSMQ消息队列 ,当时的目的也是用它来作为学习WCF 消息队列MSMQ编程的 基础文章.在那篇文章里,我们详细介绍了MSMQ消息队列的基本概念.安装.部 署.开发.调试等相关问题.今天我们来学习WCF分布式开发步步为赢(13):WCF 服务离线操作与消息队列MSMQ.在WCF框架下使用MSMQ消息队列服务编程. 这 里我会给出一个使用WCF MSMQ实现离线请求的DEMO示例程序. 全文结构是:[1]MSMQ基本概念

WCF分布式开发步步为赢(7):WCF数据契约与序列化

本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为什么会有序列化机制?或者说它是为了解决什么问题?作用是什么?现有的.NET 序列化机制和WCF序列化机制有什么不同?我们在本节文章里都会详细介绍.本节结构:[0]数据契约[1]序列化基本概念[2].NET 序列化机制[3]WCF序列化机制[4]代码实现与分析[5]总结. 下面我们正式进入今天的学习阶

WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发

今天我们继续WCF分布式开发步步为赢(3)WCF服务元数据交换.配置及编程开发的学习.经过前面两节的学习,我们了解WCF分布式开发的相关的基本的概念和自定义宿主托管服务的完整的开发和配置过程.今天我们来详细学习WCF服务元数据交换的相关内容.WCF服务元数据究竟是什么?为什么WCF服务要暴露元数据交换节点?这些和以前的Web Service有什么关系?WCF服务元数据交换的方式有那些?我们如何实现WCF服务元数据交换,本节我们会详细讲解.全文结构如下:[1]WCF服务元数据的基本概念.[2]WC

WCF分布式开发步步为赢(11):WCF流处理(Streaming)机制

WSE3.0框架提供了数据优化传输机制,WSE3.0构建Web服务安全(4):MTOM消息传输优化和文件上传.下载疑问里进行了介绍.WCF同样也提供了流操作来支持大数据对象的传输和处理优化机制,今天我们WCF分布式开发步步为赢系列的(4):使用流操作(Streaming Operations)优化传输.本节会详细介绍流操作的相关概念.编程实现过程,以及实际开发过程中需要主要的一些问题.本节结构:[1]流处理的概念[2]流处理的特点[3]示例代码分析[4]总结.最后上传本文的示例代码. Strea

WCF分布式开发步步为赢(14):WCF安全编程--基本概念

WCF安全机制是个非常复杂的问题,因为涉及的知识点较多,所以今天这个文 章,会分析进行WCF安全开发应该了解的哪些知识点.如何查看资料.为了更好 地理解WCF安全相关知识,我把WCF安全机制主要知识点整理为图表.本章以介绍 WCF安全机制的基础概念为主. 要学习WCF安全编程,你应该学习什么首先掌握什么基础知识?很多时候会因 为缺乏系统的安全概念,在进行WCF安全编程开发的时候,遇到很多问题,比如 所证书,这个概念相信很多初学者第一次接触的时候花费了很多时间.我当时在 做WSE安全开发的时候就查

WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发

.Net Remoting的激活方式也有三种:SingleTon模式.SingleCall模式.客户端激活方式,WCF服务实例激活类型包括三种方式:单调服务(Call Service),会话服务(Sessionful Service),单例服务(Singleton Service).他们之间有什么联系.WCF服务激活类型的优势和缺点,以及如何在项目里编程开发和设置服务实例.全文分为5个部分,首先一次介绍单调服务(Call Service),会话服务(Sessionful Service),单例服

WCF分布式开发步步为赢

WCF分布式开发步步为赢(15) WCF分布式开发步步为赢(14):WCF安全编程--基本概念 WCF分布式开发步步为赢(13):WCF服务离线操作与消息队列MSMQ WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式 WCF分布式开发步步为赢(11):WCF流处理(Streaming)机制 WCF分布式开发步步为赢(10) WCF分布式开发步步为赢(9):WCF服务实例激活类型编程与开发 WCF分布式开发步步为赢(8) WCF分布式开发步步为赢(7):WCF数据

WCF分布式开发步步为赢(10)

请求应答(Request-Reply).单向操作(One-Way).回调操作(Call Back) WCF除了支持经典的请求应答(Request-Reply)模式外,还提供了什么操作调用模式,他们有什么不同以及我们如何在开发中使用这些操作调用模式.今天本节文章里会详细介绍.WCF分布式开发步步为赢(10):请求应答(Request-Reply).单向操作(One-Way).回调操作(Call Back).本文结构:[1]请求应答(Request-Reply).[2]单向操作(One-Way).[

WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依据?面向对象的设计经验有何值得借鉴的地方?这里我们会一一给出详细的介绍.本文首先介绍的是WCF服务中契约继承的一些概念.例子代码分析,其次来讲解服务契约的设计问题.首先介绍的也是进行服务设计的必要性,服务设计的原则,示例代码分析.最后是全文的总结部分.结构如下:[1]OO面向对象设计原则,[2]服务