将不确定变为确定~transactionscope何时提升为分布式事务?

简介:

相关文章

将不确定变为确定~transactionscope何时提升为分布式事务

将不确定变为确定~transactionscope何时提升为分布式事务~续      

将不确定变为确定~transactionscope何时提升为分布式事务~再续(避免引起不必要的MSDTC)


 

       对于frameworks的TransactionScope大家应该都很熟悉了,它是一个分布式事务的语句块,被包含起来的语句可以一起被提交,当出现异常后,统一进行回滚,这一切都是托管的。

当WEB服务器没有开启MSDTC服务时,会出现这个提示:

对于servers.msc中的MSDTC服务,它经常性的被挂掉

注意一下:如果你的msdtc服务挂了,当下一次WWW程序需要用到它时,它会自由重启。

而对于你的事务块,如果这个MSDTC服务被挂了后,如果你的事务块中包含“跨库”操作,它将会被自动提升到MSDTC分布式事务,

这时你整个代码块将会中断,并抛出你的异常!

 1     public abstract class DAL<T> : IDAL<T> where T : class
 2     {
 3 
 4         public DAL(DbContext db)
 5         {
 6             DB = db;
 7         }
 8 
 9 
10         #region Properies
11         /// <summary>
12         /// 静态上下文
13         /// </summary>
14         //  protected readonly static DbContext DB = new Entity.testEntities();
15 
16         /// <summary>
17         /// 实例上下文
18         /// </summary>
19         protected DbContext DB;
20 
21         #endregion
 1       using (TransactionScope trans = new TransactionScope())
 2             {
 3                 try
 4                 {
 5                     base.Insert(entity);
 6                     entity.User_Profile.ID = entity.ID;
 7                     user_ProfileDAL.Insert(entity.User_Profile);
 8                     loginLogsDAL.Insert(new Entity.TestMSDTC.LoginLogs //跨库操作
 9                     {
10                         ID = entity.ID,
11                         LoginName = entity.Name,
12                     });
13                     trans.Complete();
14                 }
15                 catch (Exception)
16                 {
17 
18                     throw;
19                 }
20                 finally
21                 {
22                     trans.Dispose();
23                 }
24             }

这时,你的程序由于服务器MSDTC的问题,整个流程被“走不通”,其时这是正常的,事务的作用就是为了保持“数据的完整性”,如果你把语句块写在同一事务中,那说明他们应该是同进同退的,这是一个理论的问题。

而我在之前看过老赵写过一个博文提到这个类似问题,看数据上下文的共享性会影响到事务被提升到MSTDC,我的测试告诉我,没有实现这个结果,这里希望老赵给出一个答案吧,呵呵!在这里先谢谢赵老大了!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:将不确定变为确定~transactionscope何时提升为分布式事务?,如需转载请自行联系原博主。
目录
相关文章
|
11月前
|
人工智能 算法 Serverless
《主动式智能导购AI助手构建》解决方案用户评测
在部署体验过程中,官方提供的详尽文档和图表帮助新手轻松上手,但环境变量设置等问题仍需改进。解决方案采用Multi-Agent架构,百炼大模型实现精准推荐,函数计算优化响应速度。生产环境部署指导全面,但仍需加强异常处理和面向新手的教学资源。整体架构清晰高效,建议完善数据流描述及Router Agent算法逻辑的阐述。
302 10
《主动式智能导购AI助手构建》解决方案用户评测
|
前端开发 JavaScript 搜索推荐
HTML炫酷的相册
HTML炫酷的相册
188 1
|
安全 数据安全/隐私保护
NPM 创建和管理组织
NPM 创建和管理组织
|
机器学习/深度学习 存储 人工智能
什么是大模型?1750亿、700GB的GPT大模型大在哪?
什么是大模型?1750亿、700GB的GPT大模型大在哪?
441 0
|
Docker 容器
IDEA中连接虚拟机 管理Docker
IDEA中连接虚拟机、IDEA中SFTP连接、IDEA中连接Docker
370 1
IDEA中连接虚拟机 管理Docker
|
存储 芯片 UED
【STM32】单片机模式配置&FlyMcu串口下载固件&STLINK Utility
【STM32】单片机模式配置&FlyMcu串口下载固件&STLINK Utility
2039 0
【Java 基础】Java 数据类型和 MySql 数据类型对应表
【Java 基础】Java 数据类型和 MySql 数据类型对应表MySQL 数据类型对应 Java 数据类型 类型名称 显示长度 数据库类型 JAVA 类型 JDBC 类型索引 (int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 TINYINT
|
弹性计算 数据可视化 搜索推荐
阿里云服务器镜像有什么用?镜像是什么?
什么是镜像?阿里云服务器镜像是什么?镜像有什么用?镜像就是操作系统,镜像可以理解为云服务器的装机盘,镜像可选Linux系统或Windows操作系统,也可以选择预置了应用程序的镜像系统。
771 0
阿里云服务器镜像有什么用?镜像是什么?
|
NoSQL Java 调度
SpringBoot定时任务功能详细解析
SpringBoot定时任务功能详细解析

热门文章

最新文章