Может ли кто-то пролить свет на то, что происходит за кулисами, с помощью диспетчера транзакций SQL Lightweight, когда несколько соединений открываются к одной и той же БД, используя прикладной блок доступа к данным Microsoft (DAAB) ?
С помощью приведенного ниже кода мы убедились, что MSDTC действительно не требуется при открытии «нескольких подключений» к одной и той же базе данных.
Это был первый протестированный мной сценарий: (где Txn1 и Txn2 используют EntLib 4.1 дляоткройте соединение с одной и той же БД и вызовите разные SPROCS)
using (var ts = new TransactionScope(TransactionScopeOption.Required))
{
DAL1.Txn1();
DAL2.Txn2();
ts.Complete();
}
Трассировка этого из профилировщика показала, что один и тот же SPID соединения использовался для Txn1 и Txn2.После вызова Txn1 () SPID Sql должен был быть возвращен обратно в пул, и Txn2 () смог его повторно использовать.
Однако при повторении этого эксперимента и на этот раз при сохранении открытых соединений:
using (var ts = new TransactionScope(TransactionScopeOption.Required))
{
Database db1 = DatabaseFactory.CreateDatabase("db1");
DAL1.Txn1OnCon(db1);
Database db2 = DatabaseFactory.CreateDatabase("db1");
DAL2.Txn2OnCon(db2);
ts.Complete();
}
Просмотр этого из Профилировщика показал, что 2 транзакции были ВСЕ ЕЩЕ, используя тот же SPID.Я ожидал, что TransactionScope
перерастет в DTC, поскольку распределенная транзакция должна потребоваться для управления 2 одновременными подключениями.Что я пропустил?