Oracleデータベースと通信する分散トランザクションにNHibernateを使用する.NET4.0フレームワークで記述されたWindowsサービスがあります。テスト環境内で、サービスでデータベースでエラーが発生しました。これにより、NHibernateがADO.NET接続を閉じる際に問題が発生したようです。
セッションを開いてから破棄するまでのNHibernateに対する呼び出し全体は、System.Exceptionをキャッチするtry / catchブロック内にラップされますが、エラーはそのブロック内でキャッチされません。
参考までに、以下のWindowsイベントログからのスタックトレースを含めました。
例外が別のスレッド(スタックトレースが参照しているようです)でスローされ、それが伝播してWindowsサービスをクラッシュさせると思います。
私の質問は次のとおり
です。1。それが別のスレッドである場合、それはどこから来ていますか(何がそれを開始しますか)?
2.この例外がエスケープされてWindowsサービスが停止しないようにするために、コードに追加できるものはありますか?
アプリケーション:X
フレームワークバージョン:v4.0.30319
説明:未処理の例外が原因でプロセスが終了しました。
例外情報:NHibernate.ADOException
スタック:
NHibernate.Connection.ConnectionProvider.CloseConnection(System.Data.IDbConnection)
at NHibernate.Connection.DriverConnectionProvider.CloseConnection(System.Data.IDbConnection)
at NHibernate.AdoNet.ConnectionManager.CloseConnection()
at NHibernate .AdoNet.ConnectionManager.AfterTransaction()
at NHibernate.Impl.SessionImpl.AfterTransactionCompletion(Boolean、NHibernate.ITransaction)
at NHibernate.Transaction.AdoNetWithDistributedTransactionFactory + <> c_ DisplayClass1.b_0(System.Object、System.Transactions.TransactionEventArgs)
at System.Transactions.TransactionCompletedEventHandler.Invoke(System.Object、System.Transactions.TransactionEventArgs)
at System.Transactions.TransactionStatePromotedAborted.EnterState(System.Transactions.InternalTransaction)
at System.Transactions .InternalTransaction.DistributedTransactionOutcome(System.Transactions.InternalTransaction、System.Transactions.TransactionStatus)
at System.Transactions.Oletx.RealOletxTransaction.FireOutcome(System.Transactions.TransactionStatus)
at System.Transactions.Oletx.OutcomeEnlistment.InvokeOutcomeFunction(System )
at System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(System.Object、Boolean)
System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(System.Object、Boolean)で