gpt4 book ai didi

.net - 更改 NHibernate Session.Save 命令超时

转载 作者:行者123 更新时间:2023-12-01 19:56:01 27 4
gpt4 key购买 nike

我们有几个长时间运行的后端进程,其运行时间超过默认的 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 的观看:

((NHibernate.Driver.DriverBase)(((NHibernate.Connection.DriverConnectionProvider) ((NHibernate.Impl.SessionFactoryImpl)session.SessionFactory) .ConnectionProvider).Driver)).commandTimeout: 60

session 创建如下:

ISession session = SessionFactoryUtils.GetSession(HibernateTemplate.SessionFactory, true);

我的问题是:如果我的 Web.config 中的命令超时字段已成功设置为 60,为什么它会在 30 秒后超时?我可以尝试什么想法吗?

最佳答案

您可以将超时设置为 hibernate.connection.connection_string 属性的一部分。我没有使用过 Spring.Net,所以我不确定它是如何设置 NHibernate session 工厂的。如果您能够将“Connect Timeout=120”添加到连接字符串中。这会将时间从默认的 30 秒超时增加到 120 秒。

以下行将出现在 web.config 中:

<property name="connection.connection_string">Server=localhost;initial catalog=nhibernate;User Id=;Password=; Connect Timeout=120;</property>

编辑

事实证明,实际上有两次超时。感谢 adomokos 指出这一点。一个用于实际打开连接,另一个用于执行的查询。

上面显示了连接的超时,但是要设置 NHibernate 查询的超时,您可以使用 ICriteria 界面。

ICriteria crit = session.CreateCriteria(typeof(Foo)); 
crit.SetTimeout(120);
List<Foo> fooList = crit.List();

超时值以秒为单位。

希望有帮助

关于.net - 更改 NHibernate Session.Save 命令超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com