0

分散トランザクションを実行していますが、まれに次のエラーが発生することがあります。

System.ObjectDisposedException: 破棄されたオブジェクトにアクセスできません。オブジェクト名: 'SqlDelegatedTransaction'。System.Data.SqlClient.SqlDelegatedTransaction.Rollback(SinglePhaseEnlistment enlistment) で System.Transactions.TransactionStateDelegatedAborting.EnterState(InternalTransaction tx) で System.Transactions.Transaction.Rollback() で System.Transactions.TransactionScope.InternalDispose() で System.Transactions .TransactionScope.Dispose()

エラーは、TransactionScope がスコープ外になり、Complete() がスコープ内で呼び出されていない場合に発生します。予想される動作は、トランザクションがサイレントにロールバックすることです。トランザクションはコミットされないため、データベースに破損したデータはありません。余談ですが、nhibernate を使用していることにも言及できます。プログラムの流れは次のとおりです。

        using (var transaction = new TransactionScope())
        {
            using (var session = _sessionManager.OpenSession())
            {
                // we have to wrap the invocation with an nhibernate transaction due to a dtc bug: http://www.mail-archive.com/nhibernate-development@googlegroups.com/msg02306.html
                using (ITransaction nhibernateTrans = session.Session.BeginTransaction())
                {
                    // code altering session data goes here
                    nhibernateTrans.Commit();
                }
            }
            transaction.Complete();
        }

これはおそらく 2 か月に 1 回か 2 回発生しているため、一貫して確認されているわけではなく、一度発生すると再現することはできません。サービスに対して同じ値で同じコマンドを実行すると、期待どおりに機能します。

4

1 に答える 1

1

NHibernateのTransactionScopeには、まだ解決されていないスレッドの問題がいくつかあります。問題が次のいずれかに一致する可能性があります: https ://nhibernate.jira.com/secure/IssueNavigator.jspa?reset = true&jqlQuery = project +%3D + NH + AND + labels +%3D + TransactionScope

于 2012-10-31T13:04:57.743 に答える