muy bien, entonces no es por ese lado... puede ser que le estes asignando un dbconnection por tu cuenta a la session/sessionfactory ?
El 30 de agosto de 2010 12:39, Maria Teresa Ruiz Espinosa < [email protected]> escribió: > > > La session que se usa es diferente para cada petición > > Te enseño como lo tenemos configurado > > public class HttpContextSessionStorage: ISessionStorage > { > const string CLAVE_SESIONES = "NHibernate.Session.Keys"; > > public HttpContextSessionStorage() > { > } > > public HttpContextSessionStorage(HttpApplication httpApp) > { > if (httpApp != null) > { > httpApp.BeginRequest += Application_BeginRequest; > httpApp.EndRequest += Application_EndRequest; > } > } > > public static void Application_BeginRequest(object sender, > EventArgs e) > { > HttpContext.Current.Items[CLAVE_SESIONES] = new > Dictionary<string, ISession>(); > } > > public static void Application_EndRequest(object sender, EventArgs > e) > { > var sesionesActivas = > HttpContext.Current.Items.Contains(CLAVE_SESIONES) ? > HttpContext.Current.Items[CLAVE_SESIONES] : null; > if (sesionesActivas != null) > { > foreach (var session in ((IDictionary<string, > ISession>)sesionesActivas).Values) > { > if (session.Transaction != null && > session.Transaction.IsActive) > { > try > { > session.Transaction.Commit(); > } > catch > { > session.Transaction.Rollback(); > } > } > session.Close(); > } > } > } > > public void SetSession(string database, ISession session) > { > var sessions = (IDictionary<string, ISession>) > HttpContext.Current.Items[CLAVE_SESIONES]; > sessions[database] = session; > } > > public ISession Session(string database) > { > var sessions = (IDictionary<string, > ISession>)HttpContext.Current.Items[CLAVE_SESIONES]; > > ISession session; > sessions.TryGetValue(database, out session); > > return session; > } > } > > > //NHbinernateSession > > public static class NHibernateSession > { > > > static readonly IDictionary<string, ISessionFactory> > _sessionFactory = new Dictionary<string, ISessionFactory>(); > > // Lo convierto en propiedad porque necesitamos cambiarlo en el > transcurso de la inicialización de la aplicación: > public static ISessionStorage SessionStorage { get; set; } > > public static void Init(ISessionStorage sessionStorage, > IConfiguracionBD configuracionBD, Assembly assembly) > { > SessionStorage = sessionStorage; > > foreach (var conexion in configuracionBD.ListaDatosConexion) > { > var configuracionSessionFactory = new Configuration(); > > > configuracionSessionFactory.SetProperty("connection.connection_string", > conexion.DameConnectionString()); > configuracionSessionFactory.Configure(); > > configuracionSessionFactory.AddAssembly(assembly); > > _sessionFactory[conexion.NombreConexion] = > configuracionSessionFactory.BuildSessionFactory(); > } > } > > public static ISession Session(string database) > { > if (SessionStorage == null) > { > throw new Exception("NHibernateSession no está > inicializado. Llama a Init antes de operar con él. Comprueba también que > haya un ISessionStorage asociado a NHibernate."); > } > > ISession session = SessionStorage.Session(database); > if (session == null) > { > session = _sessionFactory[database].OpenSession(); > session.FlushMode = FlushMode.Commit; > SessionStorage.SetSession(database, session); > } > > return session; > } > } > > > > > > El 30 de agosto de 2010 17:27, José F. Romaniello > <[email protected]>escribió: > >> Hola María Teresa, me gustaría saber que hay dentro de esta línea: >> >>> var session = NHibernateSession.Session(NHibernateSession.BBDD_OFITOUR); >> >> >> Bajo ningún punto de vista deberías usar la misma session, desde >> diferentes threads, y creo que viene por ahí tu problema. >> >> El 30 de agosto de 2010 12:18, Maria Teresa Ruiz Espinosa < >> [email protected]> escribió: >> >>> Este error también nos da >>> >>> System.Data.SqlClient.SqlException: No se permite una nueva transacción >>> porque hay otros subprocesos en ejecución en la sesión. >>> >>> NHibernate.TransactionException: Begin failed with SQL exception ---> >>> System.Data.SqlClient.SqlException: No se permite una nueva transacción >>> porque hay otros subprocesos en ejecución en la sesión. >>> en System.Data.SqlClient.SqlConnection.OnError(SqlException exception, >>> Boolean breakConnection) >>> en System.Data.SqlClient.SqlInternalConnection.OnError(SqlException >>> exception, Boolean breakConnection) >>> en System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() >>> en System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, >>> SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet >>> bulkCopyHandler, TdsParserStateObject stateObj) >>> en >>> System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] >>> buffer, TransactionManagerRequestType request, String transactionName, >>> TransactionManagerIsolationLevel isoLevel, Int32 timeout, >>> SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean >>> isDelegateControlRequest) >>> en >>> System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest >>> transactionRequest, String transactionName, IsolationLevel iso, >>> SqlInternalTransaction internalTransaction, Boolean >>> isDelegateControlRequest) >>> en >>> System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest >>> transactionRequest, String name, IsolationLevel iso, >>> SqlInternalTransaction internalTransaction, Boolean >>> isDelegateControlRequest) >>> en >>> System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel >>> iso, String transactionName) >>> en >>> System.Data.SqlClient.SqlInternalConnection.BeginTransaction(IsolationLevel >>> iso) >>> en System.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel >>> isolationLevel) >>> en >>> System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction(IsolationLevel >>> isolationLevel) >>> en NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel >>> isolationLevel) >>> --- Fin del seguimiento de la pila de la excepción interna --- >>> en NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel >>> isolationLevel) >>> en NHibernate.Transaction.AdoTransaction.Begin() >>> en NHibernate.Impl.SessionImpl.BeginTransaction() >>> en >>> Ofi.OfiTourWeb.Repository.Consultas.ConsultaExpedientesUsuario.DameExpediente(String >>> idExpediente) en >>> C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Repository\Consultas\ConsultaExpedientesUsuario.cs:línea >>> 228 >>> en Ofi.OfiTourWeb.Repository.RepositorioReservas.DameExpediente(String >>> idExpediente) en >>> C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Repository\RepositorioReservas.cs:línea >>> 54 >>> en Ofi.OfiTourWeb.Core.Services.ServicioReservas.DameExpediente(String >>> idExpediente) en >>> C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Core\Services\ServicioReservas.cs:línea >>> 99 >>> en >>> Ofi.OfiTourWeb.Web.Controllers.ReservasController.MuestraResumenReservaMail(String >>> id) en >>> C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Web\Controllers\ReservasController.cs:línea >>> 272 >>> en lambda_method(Closure , ControllerBase , Object[] ) >>> en System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase >>> controller, Object[] parameters) >>> en System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext >>> controllerContext, IDictionary`2 parameters) >>> en >>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext >>> controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 >>> parameters) >>> en >>> System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() >>> en >>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter >>> filter, ActionExecutingContext preContext, Func`1 continuation) >>> en >>> System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() >>> en >>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext >>> controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, >>> IDictionary`2 parameters) >>> en System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext >>> controllerContext, String actionName) >>> en System.Web.Mvc.Controller.ExecuteCore() >>> en System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) >>> en >>> System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext >>> requestContext) >>> en >>> System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4() >>> en >>> System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() >>> en >>> System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult >>> _) >>> en System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() >>> en System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) >>> en >>> System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult >>> result) >>> en >>> System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() >>> en System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& >>> completedSynchronously) >>> >>> >>> El 30 de agosto de 2010 16:50, NM <[email protected]> escribió: >>> >>> Buenas ya escribi anteriormente con problemas con nhibernate >>>> >>>> Esta función de vez en cuando me da el errro que se especifica debajo >>>> >>>> var session = >>>> NHibernateSession.Session(NHibernateSession.BBDD_OFITOUR); >>>> using (var transaction = session.BeginTransaction()) >>>> { >>>> usuario = session >>>> .CreateQuery(@" >>>> from NhUsuarioWeb U >>>> inner join fetch U.NivelAcceso >>>> inner join fetch U.Oficina O >>>> inner join fetch O.TipoClienteEstadistica >>>> inner join fetch U.Agente >>>> where U.UsuarioWeb = :login AND >>>> U.AccesoPermitido = 'S'") >>>> .SetParameter("login", login) >>>> .SetResultTransformer(new >>>> RepositorioDtoUsuarioLoginTransformer()) >>>> .UniqueResult<Usuario>(); >>>> >>>> transaction.Commit(); >>>> } >>>> >>>> >>>> System.InvalidOperationException: >>>> Ya hay un DataReader abierto asociado a este Command, debe cerrarlo >>>> primero. >>>> >>>> NHibernate.TransactionException: Begin failed with SQL exception ---> >>>> System.InvalidOperationException: Ya hay un DataReader abierto >>>> asociado a este Command, debe cerrarlo primero. >>>> en >>>> >>>> System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand >>>> command) >>>> en >>>> >>>> System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel >>>> iso, String transactionName) >>>> en >>>> >>>> System.Data.SqlClient.SqlInternalConnection.BeginTransaction(IsolationLevel >>>> iso) >>>> en >>>> System.Data.SqlClient.SqlConnection.BeginDbTransaction(IsolationLevel >>>> isolationLevel) >>>> en >>>> >>>> System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction(IsolationLevel >>>> isolationLevel) >>>> en NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel >>>> isolationLevel) >>>> --- Fin del seguimiento de la pila de la excepción interna --- >>>> en NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel >>>> isolationLevel) >>>> en NHibernate.Transaction.AdoTransaction.Begin() >>>> en NHibernate.Impl.SessionImpl.BeginTransaction() >>>> en >>>> >>>> Ofi.OfiTourWeb.Repository.RepositorioUsuarioNh.DameDtoUsuarioLoginPorLogin(String >>>> login) en C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Repository >>>> \RepositorioUsuarioNh.cs:línea 52 >>>> en >>>> >>>> Ofi.OfiTourWeb.Repository.RepositorioUsuario.DameDtoUsuarioLoginPorLogin(String >>>> login) en C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Repository >>>> \RepositorioUsuario.cs:línea 36 >>>> en >>>> >>>> Ofi.OfiTourWeb.Core.Services.ServicioLoginUsuario.DameUsuarioPorLogin(String >>>> loginUsuario) en C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Core\Services >>>> \ServicioLoginUsuario.cs:línea 115 >>>> en >>>> >>>> Ofi.OfiTourWeb.Web.Controllers.BuscarController.RellenaFiltroBusquedaConDatosUsuario(FiltroBusqueda >>>> filtroBusqueda) en C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Web >>>> \Controllers\BuscarController.cs:línea 103 >>>> en >>>> >>>> Ofi.OfiTourWeb.Web.Controllers.BuscarController.ProcesarBusqueda(FiltroBusqueda >>>> filtroBusqueda) en C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Web >>>> \Controllers\BuscarController.cs:línea 119 >>>> en >>>> >>>> Ofi.OfiTourWeb.Web.Controllers.BuscarController.Estancias(FiltroBusquedaEstancias >>>> filtroBusquedaEstancias) en C:\Source\Ofi.OfiTourWeb\Ofi.OfiTourWeb.Web >>>> \Controllers\BuscarController.cs:línea 30 >>>> en lambda_method(Closure , ControllerBase , Object[] ) >>>> en System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase >>>> controller, Object[] parameters) >>>> en >>>> System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext >>>> controllerContext, IDictionary`2 parameters) >>>> en >>>> >>>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext >>>> controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 >>>> parameters) >>>> en >>>> >>>> System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a() >>>> en >>>> >>>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter >>>> filter, ActionExecutingContext preContext, Func`1 continuation) >>>> en >>>> >>>> System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<>c__DisplayClassf.<InvokeActionMethodWithFilters>b__c() >>>> en >>>> >>>> System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext >>>> controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, >>>> IDictionary`2 parameters) >>>> en >>>> System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext >>>> controllerContext, String actionName) >>>> en System.Web.Mvc.Controller.ExecuteCore() >>>> en System.Web.Mvc.ControllerBase.Execute(RequestContext >>>> requestContext) >>>> en >>>> >>>> System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext >>>> requestContext) >>>> en >>>> System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4() >>>> en >>>> >>>> System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0() >>>> en >>>> >>>> System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult >>>> _) >>>> en >>>> System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() >>>> en System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult >>>> asyncResult) >>>> en >>>> >>>> System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult >>>> result) >>>> en >>>> >>>> System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() >>>> en System.Web.HttpApplication.ExecuteStep(IExecutionStep step, >>>> Boolean& completedSynchronously) >>>> >>>> >>>> Por favor necesito solucionar este problema ya, pero no encuentro la >>>> forma. >>>> >>>> -- >>>> Para escribir al Grupo, hágalo a esta dirección: >>>> [email protected] >>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >>>> >>> >>> -- >>> Para escribir al Grupo, hágalo a esta dirección: >>> [email protected] >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >>> >> >> -- >> Para escribir al Grupo, hágalo a esta dirección: >> [email protected] >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano >> > > -- > Para escribir al Grupo, hágalo a esta dirección: > [email protected] > Para más, visite: http://groups.google.com/group/NHibernate-Hispano > -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
