契约:

namespace Rhythmk.Contracts
{
[ServiceContract(Namespace="http://wwww.wangkun.com")]

public interface ICalculate
{

[OperationContract]
[TransactionFlow(TransactionFlowOption.Mandatory)]
void OperationTransaction(int i);

/*
TransactionFlow - 指定服务操作是否愿意接受来自客户端的传入事务
NotAllowed - 禁止事务。默认值
Allowed - 允许事务
Mandatory - 强制事务
*/
[OperationContract]
[TransactionFlow(TransactionFlowOption.Mandatory)]
void OperationTransactionExe(int i);

}
}

服务:

using System.ServiceModel;
using Rhythmk.Contracts;

namespace Rhythmk.Services
{
/// <summary>
/// 计算器
/// </summary>
public class Calculate : ICalculate
{
#region ICalculate 成员
/// OperationBehavior - 指定服务方法的本地执行行为
/// 1、TransactionScopeRequired - 如果方法需要事务范围才能执行,则为 true;否则为 false。默认值为 false
/// 将 TransactionScopeRequired 设置为 true,可以要求操作在事务范围内执行。如果流事务可用,则操作会在该事务内执行。如果流事务不可用,则会创建一个新事务并使用它来执行操作
/// 2、TransactionAutoComplete - 默认值为 true
/// true - 当方法完成执行时,将把该事务标志为完成(自动提交事务)
/// false - 需要调用OperationContext.Current.SetTransactionComplete()方法来手工配置该事务的正确完成;否则,该事务将被标志为失败(手动提交事务)
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void OperationTransaction(int i)
{

string sql = "INSERT INTO TB_TEST (name,txt,addtime) VALUES ( 'OperationTransaction','"+(i*i).ToString()+"',GETDATE())";
SqlHelp.ExcuteSqlServer(sql);
}
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void OperationTransactionExe(int i)
{

if (i % 10 == 0)
{
throw new Exception("测试事务异常!");
}

string sql = "INSERT INTO TB_TEST (name,txt,addtime) VALUES ( 'OperationTransactionExe','" + (i * i).ToString() + "',GETDATE())";
SqlHelp.ExcuteSqlServer(sql);

}

#endregion
}
}

寄宿

class Program
{
static void Main(string[] args)
{
CreateCalculateService();
}
static void CreateCalculateService()
{
Console.WriteLine("----------CreateCalculateService---Star---------");
using (ServiceHost host = new ServiceHost(typeof(Calculate)))
{
host.Opened += delegate { Console.WriteLine("CalculateService已经启动,按任意键终止服务!"); };
host.Open();
Console.Read();
}

}
}

服务端配置:

备注:        <binding name="TransactionConfig" transactionFlow="true"></binding>  需要在配置中开启事务流

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metaBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Rhythmk.Services.Calculate" behaviorConfiguration="metaBehavior" >
<endpoint address=""
binding="wsHttpBinding" bindingConfiguration="TransactionConfig" contract="Rhythmk.Contracts.ICalculate" >
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:1234/Rhythmk.Services.Calculate"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="TransactionConfig" transactionFlow="true"></binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>

通过服务引用调用事务:

public void ExcuteTransaction(int i)
{
RhythmWCF.ICalculate proxy = new RhythmWCF.CalculateClient();
System.Transactions.TransactionOptions tran = new System.Transactions.TransactionOptions();
//设置事务超时时间
tran.Timeout = new TimeSpan(3000);
//设置事务的隔离级别
tran.IsolationLevel = System.Transactions.IsolationLevel.Serializable;
using (var ts = new System.Transactions.TransactionScope())
{
try
{
proxy.OperationTransaction(i);
// 输入为10的倍数 将会报告异常 .
proxy.OperationTransactionExe(i);
ts.Complete(); //提交事务
}
catch (Exception ex)
{
lb.Text = ex.ToString();
}

}
}

4.WCF事务【Transaction】相关推荐

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

    今天我们继续学习WCF分布式开发步步为赢系列的12节:WCF事务机制(Transaction)和分布式事务编程.众所周知,应用系统开发过程中,事务是一个重要的概念.它是保证数据与服务可靠性的重要机制. ...

  2. 化零为整WCF(14) - 事务(Transaction)

    [索引页] [源码下载] 化零为整WCF(14) - 事务(Transaction) 作者:webabcd 介绍 WCF(Windows Communication Foundation) - 事务( ...

  3. FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)

    用 TFDSQLiteBackup 控件, 两三行代码即可完成 Sqlite 数据库的备份. procedure TForm1.Button1Click(Sender: TObject); begin ...

  4. 什么是事务(Transaction)

    摘要:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元.事务通常由高级数据库操纵语言或编程语言书写的用户程序的执行所引起,并用形如begin transaction和 ...

  5. MySQL事务(transaction) (有这篇就足够了..)

    MySQL事务处理(TransAction) 大家好,我是胡亦,一名热爱分享技术干货的博主. 思考了很久,决定写一篇关于mysql事务(transaction)的博客,一来嘛,因为最近在复习mysql ...

  6. Oracle 存储过程 中如何使用事务Transaction 自主事务 自治事务

    Oracle基础 存储过程和事务 一.事务和存储过程 在存储过程中如何使用事务.当需要在存储过程中同时执行多条添加.修改.删除SQL语句时,为了保证数据完整性,我们需要使用事务.使用方式和在PL-SQ ...

  7. 数据库事务(Transaction)的ACID特性解释

    事务(Transaction)是并发控制的基本单位.所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两 ...

  8. WCF事务编程[中篇]

    [续<上篇>]通过将TransactionFlowAttribute特性应用在服务契约的某个操作之上,并指定相应的TransactionFlowOption枚举直,仅仅定义了事务流转的策略 ...

  9. redis 在 php 中的应用(事务 [ Transaction ] 篇)

    本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) 目录: Transaction(事务) WATCH UNWATCH ...

最新文章

  1. CodeGen融合核心扩展定制文件
  2. python画图中文显示_解决Linux系统中python matplotlib画图的中文显示问题
  3. springmvc国际化
  4. python123编写函数求和_Python基础之函数
  5. 下列选项中不符合python语言变量命名规则的是_学习Python第二日--基本概念和类型...
  6. 通过VNC Viewer连接CentOS 6.9
  7. 企业创新系列之:雨巷邂逅
  8. 排序算法--冒泡排序
  9. 《AIX 5L 系统管理技术》学习笔记之第七章设备管理
  10. 【Linux系统开发】Study210开发板刷安卓系统
  11. 完整打造一个多功能音乐播放器项目(初步设想跟酷狗类似)
  12. 各大跨境电商卖家不容错过下半年的促销活动安排
  13. Self-attention GAN
  14. JAVA 生成二维码并保存到本地或文件服务器
  15. docker学习 --Compose 容器编排,常用命令等.集成spring。mysql。redis
  16. Python小学生课程学哪些内容?
  17. 为什么生命科学企业都在陆续上云?
  18. 【台大郭彦甫】Matlab入门教程超详细学习笔记七:数值微积分(附PPT链接)
  19. [Tableau] 饼图绘制
  20. INS-06101 IP adress of localhost could not be determined

热门文章

  1. 《游戏大师Chris Crawford谈互动叙事》一22.1 互动叙事前途无量
  2. 通过iscsi配置在aix上挂载存储设备
  3. Tcp连接的七次握手浅析
  4. 重温SQL——行转列,列转行(转:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html)...
  5. 浅谈ASP中Web页面间的数据传递
  6. WCF从理论到实践(4):路在何方
  7. Oracle服务器修改IP后
  8. 树莓派 Raspberry Pi 更换国内源
  9. Memcached简介
  10. poj 2398 Toy Storage (计算几何,判断点和线段关系)