TransactionScope使用(二)——msdtc不可用

在将数据库操作封装到不同方法并使用TransactionScope时,遇到“msdtc不可用”错误。开启msdtc服务后问题解决,但为何之前不报错成为疑问。分析可能是不同连接导致的,通过传入相同连接问题解决。了解msdtc是用于协调跨多个资源管理器的事务服务,非必要情况下可以停止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在上一个实例中是将所有的代码都放在了ts的范围内去执行,现在把三个操作分别定义自己的数据库连接封装在三个不同的方法中,然后将这三个方法放在ts范围内去执行。经过测试出现了一个错误“msdtc不可用”。网上查看了一下,原来需要把这个服务打开。于是本人查看了一下计算机服务,的确没有打开,打开后程序运行正常。但是之后问题出来了,为什么在上一个实例的时候没有报错呢?先来说说这个服务,百度上是这样描述的:

 

描述: msdtc.exe是微软分布式传输协调程序。该进程调用系统Microsoft Personal Web ServerMicrosoft SQL Server。该服务用于管理多个服务器。

msdtc.exe是一个并列事务,是分布于两个以上的数据库,消息队列,文件系统或其他事务保护资源管理器,删除要小心。

   通过上面的描述,本人觉得可能是将方法进行封装的时候各自都定义了自己不同的数据库连接,导致需要系统使用msdtc服务或者就是ts在将代码封装在方法中执行时有别的什么要求。通过将方法修改为传入同一个连接之后,执行后就没问题了(当然这时是把msdtc服务关闭的)。印证了第一个猜测。以下是转网上对msdtc设置的文字:

 

MSDTC(分布式交易协调器),协调跨多个数据库、消息队列、文件系统等资源管理器的事务。该服务的进程名为Msdtc.exe,该进程调用系统Microsoft Personal Web ServerMicrosoft SQL Server。该服务用于管理多个服务器 .

位置:控制面板--管理工具--服务--Distributed Transaction Coordinator

依存关系:Remote Procedure Call(RPC)Security Accounts Manager

建议:一般家用计算机涉及不到,除非你启用Message Queuing服务,可以停止。解决办法:

1. windows控制面版-->管理工具-->服务-->Distributed Transaction Coordinator-->属性-->启动       

2.CMD下运行"net start msdtc"开启服务后正常。

注:如果在第1Distributed Transaction Coordinator 无法启动,则是因为丢失了日志文件,重新创建日志文件,再启动就行了。重新创建 MSDTC 日志,并重新启动服务的步骤如下:

(1) 单击"开始",单击"运行",输入 cmd 后按"确定"

(2) 输入:msdtc -resetlog (注意运行此命令时,不要执行挂起的事务)

(3) 最后输入:net start msdtc 回车,搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值