事务处理在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. left edge algorithm.

    今天在看GCPC 2013 的时候,遇到了一个简单的任务分配的题目. 即给定一系列任务[l,r], 每个人不能同时做两个, 最多需要几个人来完成? 这个问题的一个标准解法是对所有l,r排序,然后遇到l ...

  2. Daject初探 - 一个开源关系型数据库对象关系映射(ORM)模型

    Daject简介 Daject是用php写的一个关系型数据库抽象模型,通过该模型,可以在不写任何SQL或写很少的SQL就能执行大多数数据库查询操作.Daject具有面向对象,跨数据库的优点,通过数据库 ...

  3. 微软职位内部推荐-SDE2 (Windows driver)

    微软近期Open的职位: SDE2 (Windows driver) Job title: Software Development Engineer 2 Location: Shanghai, Ch ...

  4. bnuoj 33647 Angry Grammar Nazi(字符串)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=33647 [题意]:字符串匹配,暴力配就行了 [题解]:截出单词,然后进行匹配就行了 [code]: ...

  5. JavaScript string array 数组

    Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); -------- ...

  6. android编程常见问题-No Launcher activity found!

    新手编程常见的问题: 问题表现: console提示:No Launcher activity found! The launch will only sync the application pac ...

  7. 【转载】Hadoop历史服务器详解

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:过往记忆(http://www.iteblog.com/)     原文地址: ...

  8. 常用的Eclilpse插件列表以及安装方式总结

    Eclipse常用插件的安装方式总结: 1.Maven Integration for Eclipse WTP     作用:用来方便开发和使用maven项目.     安装方式:Eclipse Ma ...

  9. Application、Session、Cookie、ViewState的特性

    http://blog.csdn.net/zyw_anquan/article/details/7664132   Application的特性: 存储的物理位置:服务器端内存. 存储的类型限制:任意 ...

  10. CKFinder 1.4.3 任意文件上传漏洞

    CKFinder 是国外一款非常流行的所见即所得文字编辑器,其1.4.3 asp.net版本存在任意文件上传漏洞,攻击者可以利用该漏洞上传任意文件. CKFinder在上传文件的时候,强制将文件名(不 ...