We have a couple of long running back-end processes that take longer than the default 30 seconds.
Our NHibernate version is 2.0.1.4000 and Spring.NET is 1.2.0.20313. NHibernate is configured through Spring.NET this way:
<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>
To get around this, I am trying to set the NHibernate command_timeout to 60 in the Web.config. This is from Web.config:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="command_timeout">60</property>
</session-factory>
</hibernate-configuration>
Unfortunately this does not work, the command times out after 30 seconds.
I built a console app that calls the DAO just like the web app does it. I have the exact same NHibernate configuration setting in its configuration file. The IDbCommand times out after 60 seconds and not 30, using the setting successfully from the config file.
I tried debugging the app and check if the commandTimeout was set when the DAO assembly is called from the web site. It was.
This is from Visual Studio watch:
((NHibernate.Driver.DriverBase)(((NHibernate.Connection.DriverConnectionProvider) ((NHibernate.Impl.SessionFactoryImpl)session.SessionFactory) .ConnectionProvider).Driver)).commandTimeout: 60
The session is created like this:
ISession session = SessionFactoryUtils.GetSession(HibernateTemplate.SessionFactory, true);
My question is: if the command timeout field was successfully set to 60 from my Web.config, why does it time out after 30 seconds? Any ideas I could try?