We're using SQL Server 2005. My other theory is that we simply don't have enough database connections at peak periods.
On Fri, Feb 6, 2009 at 4:00 PM, Ayende Rahien <[email protected]> wrote: > Extremely unlikely. > If this happens, then the session (and the connection) would go out of > scope and would be reclaimed by the GC > The finalizer should release the connection anyway. > > What DB are you talking about? > > > On Fri, Feb 6, 2009 at 10:58 PM, Robin Nadeau <[email protected]> wrote: > >> I'm using the session-per-request pattern for nhibernate and am running >> out of database connections. This takes about 1 week to occur on a heavily >> loaded server, taking about 100,000 hits per day. The code I use to manage >> my session is below. My theory is that the httpsession could timeout before >> the EndRequest event, causing the reference to the session to be lost, and >> therefore no closed. Is that even possible? If so, what can be done about >> it? >> >> Public Class NHibernateSessionPerRequestModule >> Implements IHttpModule >> >> Public Sub New() >> End Sub >> >> >> ' In the Init function, register for HttpApplication >> ' events by adding your handlers. >> Public Sub Init(ByVal application As HttpApplication) _ >> Implements IHttpModule.Init >> AddHandler application.BeginRequest, _ >> AddressOf Me.Application_BeginRequest >> AddHandler application.EndRequest, _ >> AddressOf Me.Application_EndRequest >> End Sub >> >> Private Sub Application_BeginRequest(ByVal source As Object, _ >> ByVal e As EventArgs) >> 'Fires when the request begins >> Try >> If >> (HttpContext.Current.Request.Path.ToLower().IndexOf(".aspx") > -1) Then >> Dim session As NHibernate.ISession = >> StaticSessionManager.OpenSession() >> session.BeginTransaction() >> CurrentSessionContext.Bind(session) >> End If >> Catch ex As Exception >> Dim objLoggingController As New >> AlertPay.Utilities.LoggingController >> objLoggingController.Write("Error in creating NHibernate >> Session", "Information", 0, "0", "NHibernateSessionPerRequestModule") >> End Try >> >> >> End Sub >> >> Private Sub Application_EndRequest(ByVal source As Object, _ >> ByVal e As EventArgs) >> >> If >> (CurrentSessionContext.HasBind(StaticSessionManager.SessionFactory)) Then >> Dim session As NHibernate.ISession = >> CurrentSessionContext.Unbind(StaticSessionManager.SessionFactory) >> If Not session Is Nothing Then >> Try >> session.Transaction.Commit() >> Catch >> session.Transaction.Rollback() >> Dim objLoggingController As New >> AlertPay.Utilities.LoggingController >> objLoggingController.Write("Error in commiting >> NHibernate Session. Rolling back transaction", "Information", 0, "0", >> "NHibernateSessionPerRequestModule") >> Finally >> If session.IsOpen Then >> session.Close() >> End If >> End Try >> End If >> End If >> >> >> >> End Sub >> >> Public Sub Dispose() Implements System.Web.IHttpModule.Dispose >> End Sub >> >> End Class >> >> >> -- >> Robin Nadeau, B.Eng. >> Software Developer >> >> >> > > > > -- Robin Nadeau, B.Eng. Software Developer --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
