.NETでトランザクション処理をコーディングする際、TransactionScopeはとても便利ですよね。
MSDTCの設定 †
- TransactionScopeを使うと、スタンドアローンサーバでもMSDTCサービスが必要か? どうしても、分散トランザクションとして処理されるのか?
- 実は、TransactionScope内で利用されるSqlConnectionオブジェクトが単一の場合、Local Transactionとして処理される
- つまり、単一のSqlConnectionオブジェクトを使いまわすようにcodingすれば、MSDTCサービスは不要である
- 問題は、「上記のような規約を遵守することで、コーディングがどの程度制限され、面倒になるか」である
- 開発時に、SqlConnectionの意識を希薄にし、オブジェクトの持ち回しを不要にし、TransactionScopeの実装箇所について、いろいろ考慮しなくてもよい、というのは結構なメリット。ローカルトランザクションであってもMSDTCを利用する、という判断もありかと。