Распределенные транзакции WCF на нескольких серверах и одной базе данных - PullRequest
1 голос
/ 24 ноября 2011

Есть два сервера, на которых запущены некоторые службы в WCF.Все сервисы работают с общей базой данных.Все сервисы используют транспортный 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 Ответ

1 голос
/ 02 декабря 2011

Проблема решена.Проблема связана с используемым поставщиком базы данных npgsql, который не поддерживает DTC.Код переписан на MSSQL - и проблема исчезла.

...