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

Responder a