Tenemos un par de procesos de administración de larga ejecución que toman más tiempo que los 30 segundos predeterminados.Cambio de la sesión de NHibernate. Ahorro de tiempo de espera del comando
Nuestra versión NHibernate es 2.0.1.4000 y Spring.NET es 1.2.0.20313. NHibernate se configura a través Spring.NET esta manera:
<object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate20">
<property name="DbProvider" ref="DbProvider"/>
<property name="MappingAssemblies">
<list>
<value>SomeKindOfAnItem</value>
</list>
</property>
<property name="HibernateProperties">
<dictionary>
<entry key="expiration" value="120"/>
<entry key="adonet.batch_size" value="10"/>
<entry key="cache.provider_class" value="NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache"/>
<entry key="cache.use_query_cache" value="true"/>
<entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
<entry key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.MsSql2005Dialect"/>
<entry key="current_session_context_class" value="Spring.Data.NHibernate.SpringSessionContext, Spring.Data.NHibernate20"/>
<entry key="show_sql" value="false"/>
</dictionary>
</property>
</object>
Para evitar esto, yo estoy tratando de establecer el command_timeout NHibernate a 60 en el Web.config. Esto es de Web.config:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="command_timeout">60</property>
</session-factory>
</hibernate-configuration>
Desafortunadamente esto no funciona, los tiempos de mando después de 30 segundos.
Creé una aplicación de consola que llama a DAO al igual que lo hace la aplicación web. Tengo exactamente la misma configuración de NHibernate en su archivo de configuración. El IDbCommand supera el tiempo de espera después de 60 segundos y no 30, utilizando la configuración con éxito desde el archivo de configuración.
He intentado depurar la aplicación y comprobar si el comandoTimeout se estableció cuando se llama al ensamblado DAO desde el sitio web. Era.
Esto es de Estudio reloj visual:
((NHibernate.Driver.DriverBase) (((NHibernate.Connection.DriverConnectionProvider) ((NHibernate.Impl.SessionFactoryImpl) session.SessionFactory) .ConnectionProvider) .Driver)) CommandTimeOut:. 60
La sesión se crea de esta manera:
ISession session = SessionFactoryUtils.GetSession(HibernateTemplate.SessionFactory, true);
Mi pregunta es: si el campo de tiempo de espera del comando se estableció con éxito en 60 de mi Web.config, ¿por qué transcurre el tiempo de espera después de 30 segundos? ¿Alguna idea que pueda probar?
Sería útil si publicó una pequeña aplicación de muestra que reprodujo el problema. Escribir esa pequeña aplicación de muestra puede aclararle por qué no está funcionando. –
Gran idea, pero ya lo hice. Creé una aplicación de consola para replicar el problema, pero la aplicación de consola funciona y la aplicación web no. – adomokos