多个服务器和一个数据库的WCF分布式事务

时间:2011-11-24 00:24:49

标签: wcf distributed-transactions transactionscope

有两台服务器在WCF上运行某些服务。 所有服务都使用共享数据库。 所有服务都使用带有允许事务流的transport net.tcp

我们开始使用TransactionScope后出现问题: 第一种方法成功创建了用户 第二次成功获得他的个人资料

但第三种方法失败,数据库中找不到错误用户

using(TransactionScope scope = new TransactionScope())
{
   long employeeId = serviceOnServerA.CreateEmployee(profile);
   var employeeProfile = serviceOnServerA.GetEmployeeProfile(employeeId );

   serviceOnServerB.CreateContract(employeeId);    
   scope.Complete();
}

但是这种情况:

using(TransactionScope scope = new TransactionScope())
{
   long employeeId = serviceOnServerA.CreateEmployee(work1);
   var employeeProfile = serviceOnServerA.GetEmployeeProfile(employeeId );
   scope.Complete();
}
serviceOnServerB.CreateContract(employeeId);

工作正常,但不适合我的任务;

问题是服务器A上创建的本地事务在服务器B上不可见。 有人知道如何解决这个问题;

1 个答案:

答案 0 :(得分:1)

问题解决了。与使用过的npgsql数据库提供程序有关的问题,不支持DTC。 代码重新编写为MSSQL - 问题消失了。