Распределенные транзакции в приложении Asp.net
У нас есть корпоративное приложение, в котором мы выполняем вызов к базе данных 1, обращаемся к веб-службе, а затем к базе данных 2, все в одной последовательности событий. Мы хотели бы включить всю обработку в транзакцию. Каков наилучший способ реализации распределенной транзакции в этом сценарии?
Среда: SQL 2008, ASP.Net 3.5
1 ответ
Решение
Использовать TransactionScope
объект и разные соединения (по одному на каждую базу данных). Транзакция автоматически переходит в распределенную.
Из примера на странице MSDN:
using (TransactionScope scope = new TransactionScope())
{
using (SqlConnection connection1 = new SqlConnection(connectString1))
{
// Opening the connection automatically enlists it in the
// TransactionScope as a lightweight transaction.
connection1.Open();
using (SqlConnection connection2 = new SqlConnection(connectString2))
{
// The transaction is escalated to a full distributed
// transaction when connection2 is opened.
connection2.Open();
}
}
scope.Complete();
}