Nosotros interactuamos también con dlls de COM en las cuales se establecen
conexiones con la base de datos.

No se si por ahí vendrán los problemas.

Pero la conexión con la base de datos con nhibernate sólo se hace desde lo
que te he indicado anteriormente.

Este es nuestro hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property
name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory,
NHibernate.ByteCode.LinFu</property>
    <property
name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property
name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>

    <property name="show_sql">true</property>
    <property name="connection.isolation">ReadCommitted</property>
  </session-factory>
</hibernate-configuration>

El 30 de agosto de 2010 17:44, José F. Romaniello
<[email protected]>escribió:

> 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
>

-- 
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