事务处理在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. How to change Form & Property & Report font for current User [AX2012]

    对于我们开发人员来说,系统默认的字体,本人实在不喜欢,尤其是属性字体[太小,太细,根本看不清],每次做一个新项目[AX2012]第一件事就是更改字体. 由于AX2012没有像AX2009那样,可以工具 ...

  2. 【面试虐菜】—— Apache知识整理

    Apache性能调优1 Apache 部分:1. 移除不用的模块.2. 使用 mod_disk_cache NOT mod_mem_cache .3. 扁平架构配置mod_disk_cache.4.  ...

  3. Winform上传下载文件代码

    using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO ...

  4. Java从入门到精通——数据库篇Oracle 11g服务详解

    装上Oracle之后大家都会感觉到我们的电脑慢了下来,如何提高计算机的速度呢?我们应该打开必要的服务,关闭没有用的服务.下面是Oracle服务的详解: Oracle ORCL VSS Writer S ...

  5. WPF-控件-ControlTemplate生成的控件

    <Window x:Class="由ControlTemplate生成的控件.MainWindow" xmlns="http://schemas.microsoft ...

  6. 一致性hash应用到redis

    理解分布式存储的本质 有一个经典的实践经验: 数(值)据大了, 什么都是问题! 如果要求128B或更大数值计算, 哪么四则运算会是个大问题! 如果要求128T或更大日志存储, 哪么文件存储会是个大问题 ...

  7. 说说iOS中的手势及触摸

    一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来响应事件.在IOS中,由响应者链来对事件进行响应,所有事件响应的类都是UIResp ...

  8. android 开发 实现自动安装

    场景:实现自动安装apk程序 注意:不能使用 intent.setDataAndType(Uri.parse(apkPath),  "application/vnd.android.pack ...

  9. WinForm中Component Class、User Control及Custom Control的区别和使用建议

    reference: http://blog.csdn.net/redstonehe/article/details/1536549 .NET Framework 为您提供了开发和实现新控件的能力.除 ...

  10. 【工具】NS2安装记录

    献给同样为了NS2抓破了头皮的同志们. 1, Get Started: http://www.isi.edu/nsnam/ns/ns-build.html#allinone Build by piec ...