Hi.
When trying to complete a TransactionScope I got
"System.InvalidOperationException: The operation is not valid for the
current state of the enlistment." with the following stacktrace.
[InvalidOperationException: The operation is not valid for the current
state of the enlistment.]
System.Transactions.EnlistmentState.InternalIndoubt(InternalEnlistment
enlistment) +47
System.Transactions.VolatileDemultiplexer.BroadcastInDoubt(VolatileEnlistmentSet&
volatiles) +53
System.Transactions.TransactionStatePromotedIndoubt.EnterState(InternalTransaction
tx) +89
System.Transactions.SinglePhaseEnlistment.InDoubt(Exception e) +358
System.Data.SqlClient.SqlDelegatedTransaction.SinglePhaseCommit(SinglePhaseEnlistment
enlistment) +646
System.Transactions.TransactionStateDelegatedCommitting.EnterState(InternalTransaction
tx) +359
System.Transactions.CommittableTransaction.Commit() +398
System.Transactions.TransactionScope.InternalDispose() +638
System.Transactions.TransactionScope.Dispose() +2492
ASP.testfiles_sessiontest_aspx.Page_Load(Object sender, EventArgs
e) in
c:\Project\Litium.Studio\TestBranches\Dev-NH\Src\Web\TestFiles\SessionTest.aspx:28
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
+3178
Direct after the first exception my
AppDomain.CurrentDomain.UnhandledException-handler is registering this
exception before the IIS application is crashing.
------------------------------
UnhandledException:
appId=/LM/W3SVC/21/ROOT
type=System.InvalidOperationException
message=The operation is not valid for the current state of the enlistment.
stack=
at System.Transactions.EnlistmentState.ForceRollback(InternalEnlistment
enlistment, Exception e)
at System.Transactions.PreparingEnlistment.ForceRollback(Exception e)
at
NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.DistributedTransactionContext.System.Transactions.IEnlistmentNotification.Prepare(PreparingEnlistment
preparingEnlistment)
at
System.Transactions.VolatileEnlistmentPreparing.EnterState(InternalEnlistment
enlistment)
at
System.Transactions.TransactionStatePromotedPhase0.EnterState(InternalTransaction
tx)
at System.Transactions.Phase0VolatileDemultiplexer.InternalPrepare()
at System.Transactions.VolatileDemultiplexer.PoolablePrepare(Object
state)
at
System.Transactions.Oletx.OletxVolatileEnlistment.Prepare(OletxVolatileEnlistmentContainer
container)
at
System.Transactions.Oletx.OletxPhase0VolatileEnlistmentContainer.Phase0Request(Boolean
abortHint)
at
System.Transactions.Oletx.OletxTransactionManager.ShimNotificationCallback(Object
state, Boolean timeout)
at
System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(Object
state, Boolean timedOut)
------------------------------
NHibernate log
------------------------------
2013-03-15 23:20:00,676 [ ] DEBUG NHibernate.Impl.SessionImpl -
[session-id=b44d75bc-4eb1-4a05-a8c8-728c6ec78396] opened session at
timestamp: 634989864006, for session factory:
[/57fa339189e0461b8925d0ca8ba5b0fa]
2013-03-15 23:20:00,682 [ ] DEBUG
NHibernate.Transaction.ITransactionFactory - enlisted into DTC transaction:
Serializable
2013-03-15 23:20:00,691 [ ] DEBUG NHibernate.Transaction.AdoTransaction
- Begin (Unspecified)
2013-03-15 23:20:00,692 [ ] DEBUG
NHibernate.Connection.DriverConnectionProvider - Obtaining IDbConnection
from Driver
2013-03-15 23:20:00,701 [ ] DEBUG NHibernate.Transaction.AdoTransaction
- Start Commit
2013-03-15 23:20:01,730 [ ] DEBUG NHibernate.Impl.SessionImpl - before
transaction completion
2013-03-15 23:20:01,734 [ ] DEBUG NHibernate.Transaction.AdoTransaction
- IDbTransaction Committed
2013-03-15 23:20:01,740 [ ] DEBUG NHibernate.Impl.SessionImpl -
transaction completion
2013-03-15 23:20:01,742 [ ] DEBUG NHibernate.AdoNet.ConnectionManager -
aggressively releasing database connection
2013-03-15 23:20:01,743 [ ] DEBUG
NHibernate.Connection.ConnectionProvider - Closing connection
2013-03-15 23:20:01,756 [ ] DEBUG NHibernate.Transaction.AdoTransaction
- IDbTransaction disposed.
2013-03-15 23:20:01,764 [ ] DEBUG NHibernate.Impl.SessionImpl - before
transaction completion
2013-03-15 23:20:21,764 [ ] DEBUG
NHibernate.Transaction.ITransactionFactory -
[session-id=b44d75bc-4eb1-4a05-a8c8-728c6ec78396] Flushing from Dtc
Transaction
2013-03-15 23:20:21,766 [ ] DEBUG
NHibernate.Transaction.ITransactionFactory - prepared for DTC transaction
2013-03-15 23:20:21,769 [ ] ERROR
NHibernate.Transaction.ITransactionFactory - DTC transaction prepre phase
failed
------------------------------
File: SessionTest.aspx
------------------------------
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Transactions" %>
<%@ Import Namespace="NHibernate" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
var sessionFactory = IoC.Resolve<ISessionFactory>(); // Wrapper around
Windsor-container
using (var scope = new TransactionScope())
{
var session = sessionFactory.OpenSession();
{
using (var tran = session.BeginTransaction())
{
session.Flush();
tran.Commit();
}
}
scope.Complete();
}
}
</script>
OK
------------------------------
The code is working correctly when running from xUnit-test without
exception but not when running inside IIS on Windows 7 x64, database is SQL
Server 2012 and .net framework 4.5. The code is also working if I remove
the TransactionScope or not run the scope.Complete() to rollback the
transaction.
Have tried with ICurrentSessionContext that handle sessions both in the
HttpContext.Current.Items and
in System.Runtime.Remoting.Messaging.CallContext with the same exception
(will try with static session handling but don't think that matter in this
case).
I'm using the NHibernate.3.4.0-Alpha1 nuget package of NHibernate, know
that it is a prerelease and have not tested with latest stable/dev-version
but will do that if not anyone will have any good suggestions what it can
be.
Anyone that have a suggestion what it can be or if it already exists any
open bugs regarding the same exception? Tried to find in jira and find some
with the same exception but with different messages and stacktrace.
// Patric
--
---
You received this message because you are subscribed to the Google Groups
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.