У нас есть несколько длительных внутренних процессов, которые занимают больше времени, чем 30 секунд по умолчанию.
Наша версия NHibernate - 2.0.1.4000, а Spring.NET - 1.2.0.20313.
NHibernate настраивается через Spring.NET следующим образом:
<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>
Чтобы обойти это, я пытаюсь установить для параметра command_timeout NHibernate значение 60 в файле Web.config.
Это из Web.config:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="command_timeout">60</property>
</session-factory>
</hibernate-configuration>
К сожалению, это не работает, команда истекает через 30 секунд.
Я создал консольное приложение, которое вызывает DAO точно так же, как это делает веб-приложение. У меня точно такой же параметр конфигурации NHibernate в его файле конфигурации. Время ожидания IDbCommand истекает через 60 секунд, а не через 30, при успешном использовании настройки из файла конфигурации.
Я попытался отладить приложение и проверить, был ли установлен параметр commandTimeout при вызове сборки DAO с веб-сайта. Это было.
Это из часов Visual Studio:
((NHibernate.Driver.DriverBase) (((NHibernate.Connection.DriverConnectionProvider)
((NHibernate.Impl.SessionFactoryImpl) session.SessionFactory)
.ConnectionProvider) .Driver)). CommandTimeout: 60
Сессия создается так:
ISession session = SessionFactoryUtils.GetSession(HibernateTemplate.SessionFactory, true);
У меня такой вопрос: если в тайм-ауте команды было успешно установлено значение 60 из моего файла Web.config, то почему оно истекает через 30 секунд? Любые идеи, которые я мог бы попробовать?