Juan, I should add it leaks if you rollback the transaction, perhaps
due to an exception. If you commit, its fine.

On Jun 2, 12:19 pm, Iain <[email protected]> wrote:
> Juan, I have tested that scenario and it doesleak, unless you promote
> the transaction to a distributed transaction. The solution I have
> settled on is this one:
> using (var scope = new
> TransactionScope(TransactionScopeOption.Suppress))
> {
>     using (ISession session = sessionFactory.OpenSession())
>     {
>         using (var scope = new
> TransactionScope(TransactionScopeOption.RequiresNew))
>         {
>             // This will hit the database
>             session.CreateSQLQuery("SELECT
> GETDATE()").ExecuteUpdate();
>             Transaction.Current.PromoteToDistributed();
>         }
>     }}
>
> Notes:
> 1. When you call session.Dispose, you cannot be in another
> transaction. Otherwise it leaks
> 2. When you do your work, you must ensure it is a distributed
> transaction. Otherwise it leaks
> 3. You cannot re-use a session, because the transaction completes on
> another thread your get a race condition
>
> After my last reply I tested a few other scenarios using the
> nHibernate BeginTransaction and they failed. But there is hope, a
> colleague pointed out the following blog, he is testing it and I'll
> post back if it 
> works.http://davybrion.com/blog/2010/05/avoiding-leaking-connections-with-n...
>
> On May 18, 2:21 pm, Juan <[email protected]> wrote:
>
>
>
> > Iain,connectionleaks occur because the session is not properly
> > disposed/closed. The current pattern I have been using with no
> > problems is
>
> > ISession session = OpenSessio();
> > try
> > {
> >   using(var ts = new TransactionScope())
> >   {
> >     ...
> >     ts.Complete();
> >   }}
>
> > finally { session.Dispose(); }
> > On Apr 15, 12:48 am, Iain <[email protected]> wrote:
>
> > > Hi All,
>
> > > I am having aconnectionleakwhen we using the ambient transaction,
> > > and the transaction is aborted. That is, I get the exception:
> > > System.InvalidOperationException: Timeout expired.  The timeout period
> > > elapsed prior to obtaining aconnectionfrom the pool.  This may have
> > > occurred because all pooled connections were in use and max pool size
> > > was reached.
>
> > > I am guessing something is holding onto a reference to theconnection,
> > > or an internal part of theconnection. As adding a watch to following
> > > and debug breaking within the transaction also causes this issue.
> > >                 ((System.Data.SqlClient.SqlInternalConnectionTds)
> > > ((System.Data.SqlClient.SqlConnection)
> > > (session.Connection))._innerConnection)._connectionPool.Count
>
> > > Is this a known issue or unsupported? Currently our workaround is to
> > > promote the transaction to a distributed transaction which seems to
> > > work ok, as per this 
> > > article:http://davybrion.com/blog/2010/03/msdtc-woes-with-nservicebus-and-nhi...
>
> > > Here is the unit test that re-produces the issue:
>
> > > [Test]
> > > public void CanUseSystemTransactionsToAbort()
> > > {
> > >     for (var i = 0; i < 200; i++)
> > >     {
> > >         using (ISession session = sessions.OpenSession())
> > >         using (TransactionScope tx = new
> > > TransactionScope(TransactionScopeOption.RequiresNew))
> > >         {
> > >             W s = new W();
> > >             session.Save(s);
> > >             session.Flush();
> > >         }
> > >     }
>
> > > }
>
> > > Cheers,
>
> > > Iain
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "nhusers" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > For more options, visit this group 
> > athttp://groups.google.com/group/nhusers?hl=en.-Hide quoted text -
>
> > - Show quoted text -- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to