(DTC を取り巻く状況と取引の促進は、知らない人にとっては少し不可思議なことかもしれませんが、私の会社がどのように物事を行っているかをお見せしましょう。また、DTC が関与している理由を教えていただければ幸いです。 、可能であれば、それを回避するために何ができるか、感謝します.)
ASP.Net Web サーバーでコードを実行しています。データベースは 1 つ、SQL 2008 です。
データ アクセス コードは次のようになります。SQLConnections と SQLCommands のラッパー オブジェクトを使用するデータ アクセス層があります。典型的な使用法は次のようになります。
void method1()
{
objDataObject = new DataAccessLayer();
objDataObject.Connection = SomeConnectionMethod();
SqlCommand objCommand = DataAccessUtils.CreateCommand(SomeStoredProc);
//create some SqlParameters, add them to the objCommand, etc....
objDataObject.BeginTransaction(IsolationLevel.ReadCommitted);
objDataObject.ExecuteNonQuery(objCommand);
objDataObject.CommitTransaction();
objDataObject.CloseConnection();
}
実際、SqlClient、SqlConnection などの非常に薄いラッパーです。トランザクションでいくつかのストアド プロシージャを実行したいのですが、ラッパー クラスでは SqlTransaction にアクセスできないため、あるコンポーネントから次のコンポーネントに渡すことができません。 . これにより、TransactionScope を使用するようになりました。
using (TransactionScope tx1 = new TransactionScope(TransactionScope.RequiresNew))
{
method1();
method2();
method3();
tx1.Complete();
}
これを行うと、DTC が関与します。残念ながら、私たちの Web サーバーでは、MSDTC 設定で「リモート クライアントを許可する」が有効になっていません。
DTC の関与を避けたいのですが、できますか? Methods1-3() のトランザクション呼び出しを省略して、TransactionScope にすべてを理解させることはできますか?