在进行数据持久化的时候,我们会经常用到事务处理。一般情况下,ADO.NET中的事务处理就能够满足我们的需要,但是,ADO.NET中的事务不能同事对多个数据库连接进行原子性的操作;如果在你的业务环境中存在多个数据库、文件写入等操作,同时需要保证数据完整性和一致性的时候,你可以考虑使用.NET提供的分布式事务处理。

  使用分布式事务处理,需要Windows系统的支持,所以,我们需要将系统的MSDTC服务开启。步骤:管理工具>组件服务;依次展开 控制台根节点>组件服务>计算机>我的电脑;在“我的电脑”节点上右键打开“属性”;在选项卡中勾选“使用本地协调器”,然后点击“确定”按钮,如下图:

  设置完成以后,我们就可以很方便的使用分布式事务处理了。首先,在项目中添加“System.Transactions”引用,然后编写如下代码:

class TransactionEx
{
/// <summary>
/// 用事务执行一个方法,并设置超时时间
/// </summary>
/// <param name="action">方法代理</param>
/// <param name="timeout">超时时间</param>
public static void InvokAction(Action action, int timeout)
{
TransactionOptions transactionOption = new TransactionOptions();
transactionOption.Timeout = TimeSpan.FromSeconds(timeout);

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption))
{
action.Invoke();
scope.Complete();
}
}
}

  以上这段代码是执行事务的核心代码,你只需要将要执行代码作为一个委托传入InvokAction,并出入一个超时时间就可以了。在事务执行结尾,调用Complete方法,可以将事务提交。如果没有调用Complete方法,即使事务执行完成,也不会进行提交。如果出现异常,所有代码都不会改变。

----------------------------------------------------------

ps:

1.还发现一个问题,数据库也需要开启分布式事务的支持:右键“服务器连接”的属性,在打开的属性窗口选择“连接”,在窗口右侧,勾选“需要将分布式事务用于服务器到服务器的通信”,确定即可。

2.需要打开分布式的端口,端口号是135,或者添加System32下msdtc.exe的例外。

3.跨域的情况有待考究。

4.在事务中,即使存在嵌套的情况,同一个事务内的所有数据库连接对数据都是可访问的。

5.在事务中,如果使用Response.Redirect()方法跳转到其它页面,事务将无法提交!

转载于:https://www.cnblogs.com/youring2/archive/2011/06/12/MSDTC.html

.NET分布式事务处理相关推荐

  1. 【转】错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有--解决方案

    SQL 错误: ORA-01591: 锁被未决分布式事务处理 7.2.428982 持有 01591. 00000 -  "lock held by in-doubt distributed ...

  2. 错误信息:Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务

    在联机文档中是这样描述MS DTC的: Microsoft 分布式事务处理协调器 (MS DTC) 是一个事务管理器,它允许客户端应用程序在一个事务中包含多个不同的数据源.MS DTC 协调在所有已在 ...

  3. 深入浅出:Microsoft分布式事务处理协调器

    深入浅出:Microsoft分布式事务处理协调器 http://www.searchdatabase.com.cn/showcontent_44713.htm posted on 2011-03-19 ...

  4. 基于mysql和php的分布式事务处理1,基于MySQL和PHP的分布式事务处理

    PHP(超级文本预处理语言)是一种基于服务器端.执行效率高且易于开发的HTML内嵌式语言,是用户生成动态网页的工具之一[1].MySQL是全球最受欢迎的小型开放源码的关系型数据库管理系统,其体积小.速 ...

  5. .NET简谈事务、分布式事务处理

    在本人的 " .NET简谈事务本质论"一文中我们从整体上了解了事务模型,在我们脑子里能有一个全局的事务处理结构,消除对数据库事务的依赖理解,重新认识事务编程模型. 今天这篇文章我们 ...

  6. 互联网环境下分布式事务处理系统现状与趋势

    互联网环境下分布式事务处理系统现状与趋势 马鹏玮, 魏凯, 姜春宇 中国信息通信研究院云计算与大数据研究所,北京 100191 摘要:传统集中式数据处理系统由于摩尔定律的逐渐失效,开始显露出性能瓶颈, ...

  7. oracle分布式事物锁,ORA-02049:超时:分布式事务处理等待锁诊断-Oracle

    正式环境有两个数据库A和B,在A库上建的dblink,业务是要将A库中的一些表,通过dblink更新到B库中去,更新的时候总是报错:ORA-02049: 超时: 分布式事务处理等待超时. 之前我写过一 ...

  8. java 分布式事务处理

    分布式事务处理 当数据分布在多个数据库服务器上时,就需要各种保护措施来保证数据正确地写到所有数据库中.例如,考虑一个在三个分离的远程数据库上修改的 客户帐户平衡表,如果在事务写阶段,任何一个数据库连接 ...

  9. 微服务架构的分布式事务解决方案(Dubbo分布式事务处理)

    微服务架构的分布式事务解决方案(Dubbo分布式事务处理) 参考文章: (1)微服务架构的分布式事务解决方案(Dubbo分布式事务处理) (2)https://www.cnblogs.com/qiyu ...

最新文章

  1. golang strings Replace 字符串替换
  2. redis应用场景(2)日志记录及指标统计
  3. ASP.NET怎么防止多次点击提交按钮重复提交
  4. [html] 页面需要支持多语言,如果是你该怎么做?
  5. windows设备坐标和逻辑坐标的转换
  6. poi获取有效单元格个数_EXCEL利用SUM函数和FREQUENCY函数数组公式统计不同区间数据个数...
  7. 寺庙的纪律性也让我颇有感触
  8. 漫画算法:5 分钟搞明白红黑树到底是什么?
  9. QDir类及其用法总结
  10. 英特尔酷睿处理器后缀
  11. 自行车电动自行车|GCC认证办理流程
  12. 读《创业36条军规》(三)学先进 傍大款 走正道
  13. opengl模型加载
  14. 网络科学论坛纪要-2012
  15. 如何重设思科路由器密码并保持配置不丢失?
  16. bootstrap登录模板
  17. 利用python爬取甲骨文图片及其对应的汉字含义,共1062个甲骨文,百度云下载
  18. 量化交易入门阶段——欧奈尔的CANSLIM模型(A 年度净利润同比增长率)
  19. 使用MSP430F5529的ADC测量,并用OLED显示传感器输出的模拟量
  20. 【国产MCU移植】移植RT-Thread到国产芯片HC32L196

热门文章

  1. 英雄联盟手游锐雯有多么强大,新手教程全给你,瑞文很简单
  2. Python小游戏(贪吃蛇)
  3. Linux系统中病毒怎么解决
  4. springboot dubbo 问题记录
  5. linux下mysql安装笔记
  6. redis小功能大用处-bitmaps
  7. LeetCode Divisor Game
  8. AD17无法复制原理图到Word的解决方法
  9. 372 Super Pow 超级次方
  10. RDIFramework.NET ━ 9.3 用户管理 ━ Web部分