事务处理在WCF(Windows Communication Foundation)是一套遵循一些性质,统称为ACID的操作。这里,如果一个操作出现故障,整个系统就会自动失败。如网上订单生成,就可能使用事务。下面的例子可以帮助理解事务的过程中更简单的术语。

例子

假设一台液晶电视是您从在线商店订购,你会通过信用卡支付的金额。当输入必要的信息来下订单,同时出现两个操作。一个特定的量被从您的银行账户中扣除,第二是供应商贷记相同。两个操作必须以有一个成功的事务成功执行。

WCF事务属性

WCF事务有以下的四个属性。

  • 原子性 – 所有的操作都必须作为在完成一个事务的一个不可分割的操作。

  • 一致性 – 无论是什么操作设置,系统始终处于的状态总是按照预期的,即事务的结果一致性。

  • 隔离性 – 系统的中间状态是不可见的外部世界的任何实体,直到交易完成。

  • 持久性 – 提交状态保持无论任何形式的故障(硬件,停电等)。

在配置一个WCF事务,有一些因素需要考虑。这些约束力和操作行为。

  • 绑定 – 支持事务的WCF绑定只有几个,这是至关重要的,从只有这些绑定,默认情况下处于禁用状态,并应能获得事务所需支持做出选择。这些绑定说明如下。

    • NetTcpBinding
    • NetNamedPipeBinding
    • WSHttpBinding
    • WSDualHttpBinding
    • WSFederationHttpBinding
  • 操作行为 – 同时结合促进事务传播的路径,操作负责和操作配置的是至关重要的。两个属性的主要用途是相同的。它们是TransactionFlow和TransactionScopeRequired。这里应当注意的是,TransactionFlow属性主要具有三个值,它们是Allowed, Mandatory 和NotAllowed。

下面的代码显示了改变的约束力和事务约定配置是否有利于客户的传播规范。

<bindings>
<wsHttpBinding>
<binding name ="MandatoryTransBinding" transactionFlow ="true">
<reliableSession enabled ="true"/>
</binding>
</wsHttpBinding>
</bindings>

事务协议

WCF使用三种协议事务,这些都是轻量级,旧事务和WS-原子事务(WS-AT)。WS-AT是一种可互操作协议,可以跨防火墙的流量分布式事务。然而,该协议不应当事务是严格基于微软技术使用。

WCF事务阶段

有两个阶段一个WCF事务,如下所述。

  • 准备阶段 - 在这个阶段,事务管理器检查是否所有的实体准备好提交的事务。

  • 提交阶段 - 在这个阶段,实体的提交在现实中得到开始。

理解一个WCF事务的两相的功能,让我们看看下面的图。

启用WCF事务处理

要成功地使一个WCF事务成功,需要遵循一系列的六个步,。必要的步骤如下所示。

步骤1:创建两个WCF服务

在这方面,最重要的一步是建立在WCF中两个服务项目,参与到一个事务。数据库事务将在这两个服务的执行,并且应当理解,它们是如何被一个WCF事务统一。 WCFTransactions的web应用程序也被创建在单个事务范围占用两个创建的服务。

第2步:创建方法并且其属性有TransactionFlow属性

这里,UpdateData方法将被创建为将WCF服务插入到具有OperationContract特性的数据库。为了完成这个任务,接口类ServiceContract首先创建。用于实现该事务在新创建的方法,它具有TransactionFlow属性和事务都使用相同的值。

[ServiceContract]
public interface IService1
{
[OperationContract]
[TransactionFlow(TransactionFlowOption.Allowed)]
void UpdateData();
}

第3步:WCF服务带有TransactionScopeRequired属性的实现

由下面所示的编码完成。

[OperationBehavior(TransactionScopeRequired = true)]
public void UpdateData()
{
try
{
SqlConnection objConnection = new SqlConnection(strConnection);
objConnection.Open();
using(SqlTransaction transaction = Program.dbConnection.BeginTransaction())
{
Boolean doRollback = false;
using(SqlCommand cmd = new SqlCommand("insert into Customer (Customer name, Customer code) values ('sss', 'sss')"objConnection))
try
{
cmd.ExecuteNonQuery();
}
catch(SqlException)
{
doRollback = true;
break;
}
}
if(doRollback)
transaction.Rollback();
else
transaction.Commit(); }
finally
{
objConection.Close();
}
}

步骤4:由WCF服务配置文件启用事务流程

相同编码如下面给出:

<bindings>
<wsHttpBinding>
<binding name="TransactionalBind" transactionFlow="true"/>
</wsHttpBinding>
</bindings>

重要的是要重视事务允许的终点绑定暴露WCF服务。

<endpoint address="" binding="wsHttpBinding"
bindingConfiguration="TransactionalBind" contract="WcfService1.IService1">

第5步:在一个事务中调用两个服务

这里,上述两种服务被称为在一个事务中,为此目的,所述的TransactionScope对象用于这两个服务。上述对象的完整方法被调用来提交WCF事务。如果回滚,那么Dispose方法被调用。

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
try
{
// Call your webservice transactions here
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}

以下的小片的完整代码,其中WCF提交数据已经被分组描述在一个范围。

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
try
{
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
obj.UpdateData();
ServiceReference2.Service1Client obj1 = new ServiceReference2.Service1Client();
obj1.UpdateData();
ts.Complete();
}
catch (Exception ex)
{
ts.Dispose();
}
}

第6步:测试WCF事务

测试是在第6步,也是最后一步并调用第1个WCF服务后,发生异常(被迫)。

原文地址:http://www.yiibai.com/wcf/wcf_transactions.html

WCF入门(十)---WCF事务的更多相关文章

  1. WCF入门三[WCF宿主]

    一.概述 WCF程序必须在宿主上运行,也就是WCF服务必须寄宿在某一个windows的进程中,可以是IIS.控制台程序.窗体程序.WAS以及所有.net程序等程序进程中.在我用VS2013创建WCF服 ...

  2. WCF入门教程[WCF基本应用]

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  3. WCF入门一[WCF概述]

    一.什么是WCF WCF是使用托管代码建立和运行面向服务(Service Oriented)应用程序的统一框架.它使得开发者能够建立一个跨平台的.安全.可信赖.事务性的解决方案,且能与已有系统兼容协作 ...

  4. WCF入门四[WCF的通信模式]

    一.概述 WCF的通信模式有三种:请求/响应模式.单向模式和双工通信. 二.请求/响应模式 请求/响应模式就是WCF的默认模式,前面几篇随笔中的示例都是这种模式,当客户端发送请求后(非异步状态下),即 ...

  5. 纯手写wcf代码,wcf入门,wcf基础教程

    1.定义服务协定     =>定义接口 using System.ServiceModel; namespace WcfConsole { /// <summary> /// 定义服 ...

  6. WCF入门二[WCF的配置文件]

    一.概述 往往在很多项目中数据库连接字符串.变量和一些动态的加载类会写在配置文件中.WCF也会在配置文件中写入一些配置参数,比如服务的地址.服务用于发送和接收消息的传输和消息编码等,通过配置文件可以灵 ...

  7. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  8. WCF入门(十)——服务对象模型

    当发生一次WCF请求-响应操作时,会经过如下几个步骤 WCF Client想WCF Server发送一个服务请求 WCF Server创建WCF服务对象 WCF Server调用WCF服务对象接口,将 ...

  9. [WCF编程]1.WCF入门示例

    一.WCF是什么? Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,整合了原有的windows通讯的 .net Remotin ...

随机推荐

  1. OSM 中国数据(每天都在更新)

    http://download.geofabrik.de/asia/china.html

  2. Windows Phone中的图形渲染处理

    前言    这篇文章主要介绍Windows Phone中XAML的渲染处理过程,你可以根据下文中所提到的内容来优化现有的XAML页面,来提高页面渲染的性能. XAML的渲染包括以下两个阶段: 1. 光 ...

  3. 【rest】 深入理解rest

    起因是想搞明白 ajax.rest风格和http请求数据会有什么区别 再来回顾一下概念: REST即表述性 状态 传递 满足这些约束条件和原则的应用程序或设计就是RESTful.需要注意的是,REST ...

  4. [转]win7+ubuntu 13.04双系统安装方法

    win7+ubuntu 13.04双系统安装方法 http://jingyan.baidu.com/article/60ccbceb18624464cab197ea.html 当需要频繁使用ubunt ...

  5. redhat或centos关闭防火墙并开启sshd服务

    使用putty连接虚拟机的redhat连不上时处理方案: 这里使用的是VMware Workstation,  将宿主机与虚拟机之间的网络使用 ‘桥接方式’: 1.关闭宿主机与虚拟机的防火墙, 在re ...

  6. cocos2dx中的CCRect的用法

    CCRect是cocos2dx中的一块矩形区域 常用于碰撞检测及渲染时限定纹理的大小 CCRect rect=spr.boundingBox(); CCRect rect=CCRect(0,0,spr ...

  7. centos 64位linux系统下安装appt命令

    首先,安装apktool包 1. wget http://android-apktool.googlecode.com/files/apktool-install-linux-r04-brut1.ta ...

  8. OC self super isa指针

    self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可 ...

  9. 我只知道一点非常简单的关于MVC的验证

    我只知道一些非常简单的关于MVC的验证 如题,我只知道一点非常简单的关于MVC的验证,所以如果您接触过MVC的验证,相信也就不用看了,这个且当作是学习笔记吧. 先小讲解一下他基本的五个从Model里打 ...

  10. 关于cookie的一点知识

    关于cookie的一点知识 1.cookie是存储在客户端计算机中. 2.cookie不能跨浏览器访问.cookie是浏览器保存的,所以不同浏览器对cookie的保存路径.存储数据的格式.文件大小都可 ...