有两台服务器在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上不可见。 有人知道如何解决这个问题;
答案 0 :(得分:1)
问题解决了。与使用过的npgsql数据库提供程序有关的问题,不支持DTC。 代码重新编写为MSSQL - 问题消失了。