TransactionScope分布式事务出错:msdtc已经取消了分布式事务。

MXCZ945 MXCZ945 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

using (TransactionScope scope = new TransactionScope())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(Configuration.ConnectionString))
{
bulkCopy.DestinationTableName = "GeographyPerformanceData";
bulkCopy.BatchSize = geoPerformTable.Rows.Count;
bulkCopy.WriteToServer(geoPerformTable);

bulkCopy.Close();
}
//批量更新(使用了SqlTranaction事务)
if (lstUpdateSql.Count > 0)
{
int updatedCount = KPIPerformanceDataBLL.Instance.BatchUpdate(lstUpdateSql);
if (updatedCount == 0)
{
ri.Success = false;
ri.Message = "导入失败!请重试。";
return ri;
}
}

//同步地区目标数据到经理信息,在sql语句中使用了tran事务
for (int rowIndex = 0; rowIndex < performData.Rows.Count; rowIndex++)
{
geographyCode = performData.Rows[rowIndex][4].ToString().Trim();
try
{
GeographyPerformanceDataBLL.Instance.SyncGeoTargetToManager(PerformanceEvalInfo.Id, geographyCode);

}
catch (Exception ex)
{
ri.Success = false;
ri.Message = "同步地区目标数据到经理信息出错!\n内部错误说明:" + ex.Message;
return ri;
}
}

//commit transaction
scope.Complete();
}


asp.net程序。
以上代码有在scope内部有三个任务,批量insert,批量update,还有最后一个是带sql tran的
存储过程。
每个部分都可以单独执行,(就是说,代码或sql无错)。
存储过程如下:

ALTER PROCEDURE [dbo].[INSERTKPIDATAFROMGEODATA]
(
@EMPLOYEEID UNIQUEIDENTIFIER, --经理ID
@GEOGRAPHYID UNIQUEIDENTIFIER,--负责地区ID
@EVALUATIONID UNIQUEIDENTIFIER--考核ID

--'40911A5E-2958-4790-BA2F-A701104B501E','0FAC819B-68ED-4A4E-AD74-31F44B6BAC80','C55B73DE-50D9-4391-8784-E60753C56BBF'
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRAN
//一些操作,绝无语法及数据错误。
COMMIT TRAN
RETURN 1
END TRY
BEGIN CATCH
ROLLBACK TRAN
RETURN 0
END CATCH
END

但是每次执行都是在执行了存储过程之后报错

“Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务”

前提是客户端和服务端均已经配置了MSDTC,对此错误无从下手,望有经验的高手帮忙解决!!!谢谢!!
...全文

相关推荐

TransactionScope和分布式事务

布式事务听起来很不错,其实不然。它只是尽可能的降低数据不一致的可能性,并不能完全避免。从我的应用中来看,总数约5千万的操作,错了十几个。当然,这个错误率完全可以忍受了。不能忍受的是当你的DB在cluster(集群)当中,msdtc也会被作为一项资源出现,cluster的某些问题会诡异的导致msdtc不可用,问题排查起来是非常郁闷的。

yulien

TransactionScope出错

TransactionScope 是.net 提供的可提升事务环境,开发软件的时候非常方便,但是在大数据量处理的时候,会莫名我出错,检查代码没有任何的错误 解决这个错误的方法:不用TransactionScope ,自己写一个用MSDTC的事务就可以了。

yulien

分布式事务处理方案

多服务器实现分布式事务功能! 安装DTC组件,设置MSDTC,注意:双方都要启动MSDTC服务,MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住;保证链接服务器中语句没有访问发起事务服务器的操作。 采用WEB的TransactionScope(事务块)方式,实例代码如下: public void GotoTransactionScope() { //创建事务块 using (TransactionScope TransScope = new TransactionScope()) { try { int intResult = 0; //服务器1操作 intResult = GoServerOne(); ..........................

蓝色韵脚

net 2.0 分布式事务解决方案有原代码

net 2.0 分布式事务解决方案有原代码,绝对可以运行。绝对原创。

DoNET扫地僧

解决分布式事务详细文档

主要应用在两个服务器之间数据传输 两个系统之间的数据传输! 最便捷,最全面的技术文档,值得珍藏哦!呵呵

star7827
评论 4
收藏 已收藏
分享
返回顶部
MXCZ945
C# 111,128 成员 642,537 内容