If it is another thread, where does it come from (what starts it)?
Inside NHibernate.Transaction.AdoNetWithDistributedTransactionFactory
, there exists an event handler for System.Transactions.Transaction.TransactionCompleted
. This event is fired on a thread pool thread by the .NET framework upon completion, as shown at the bottom of your stack trace.
Is there anything I can add to my code to make sure this exception does not escape and bring down the windows service?
The correct thing to do is hunt down exactly why the exception occurs. I haven't used Oracle, but didn't really have this particular issue dealing with DTC and SQL Server (though there are plenty of other ones). The source of the problem could be DTC or a bug in NHibernate.