TransactionScope分布式事务出错:msdtc已经取消了分布式事务。
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不可用,问题排查起来是非常郁闷的。
TransactionScope出错
TransactionScope 是.net 提供的可提升事务环境,开发软件的时候非常方便,但是在大数据量处理的时候,会莫名我出错,检查代码没有任何的错误 解决这个错误的方法:不用TransactionScope ,自己写一个用MSDTC的事务就可以了。
分布式事务处理方案
多服务器实现分布式事务功能! 安装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 分布式事务解决方案有原代码,绝对可以运行。绝对原创。
解决分布式事务详细文档
主要应用在两个服务器之间数据传输 两个系统之间的数据传输! 最便捷,最全面的技术文档,值得珍藏哦!呵呵


