我们有一些长时间运行的后端进程,比默认的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>
为了解决这个问题,我正在尝试在 Web.config 中将 NHibernate command_timeout 设置为 60。
以下是 Web.config 中的内容:<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="command_timeout">60</property>
</session-factory>
</hibernate-configuration>
很不幸,这并不起作用,命令在30秒后超时。
我建了一个控制台应用程序,就像Web应用程序一样调用DAO。 在其配置文件中具有完全相同的NHibernate配置设置。 使用成功从配置文件中的设置,IDbCommand超时时间为60秒,而不是30秒。
我尝试调试应用程序,并检查DAO程序集从网站调用时是否设置了commandTimeout。它已经被设置了。
下面是来自Visual Studio watch的信息:
((NHibernate.Driver.DriverBase)(((NHibernate.Connection.DriverConnectionProvider) ((NHibernate.Impl.SessionFactoryImpl)session.SessionFactory) .ConnectionProvider).Driver)).commandTimeout: 60
创建会话的方式如下:
ISession session = SessionFactoryUtils.GetSession(HibernateTemplate.SessionFactory, true);
我的问题是:如果我从Web.config中成功将命令超时字段设置为60,那么为什么它在30秒后超时?有什么解决方法吗?