7
一部のマシンではTransactionScopeが自動的にMSDTCにエスカレートしますか?
このプロジェクトでは、TransactionScopeを使用して、データアクセスレイヤーがトランザクションでアクションを実行するようにします。エンドユーザーのマシンでMSDTCサービスを有効にする必要がないことを目指しています。 問題は、開発者のマシンの半分で、MSDTCを無効にして実行できることです。残りの半分は有効にする必要があります。そうしないと、「[サーバー]のMSDTCが利用できません」というエラーメッセージが表示されます。 それは本当に頭を悩ませる原因になり、ADO.NETトランザクションオブジェクトに基づく自作のTransactionScopeのようなソリューションにロールバックすることを真剣に検討するように私に促します。それは一見非常識だ-私たちの開発者の半分の作品は(とエスカレートしない)と同じコードし、他の開発者にエスカレートします。 トランザクションがDTCにエスカレートされる理由をトレースに適切に回答することを望んでいましたが、残念ながらそうではありません。 問題を引き起こすコードのサンプルは次のとおりです。エスカレートしようとするマシンでは、2番目の接続でエスカレートしようとします。 using (TransactionScope transactionScope = new TransactionScope() { using (SqlConnection connection = new SqlConnection(_ConStr)) { using (SqlCommand command = connection.CreateCommand()) { // prep the command connection.Open(); using (SqlDataReader reader = command.ExecuteReader()) { // use the reader connection.Close(); } } } // Do other stuff here that …