Nhibernate 超时设置为无限时间时超时异常

Nhibernate 超时设置为无限时间时超时异常,nhibernate,timeout,castle-activerecord,sqlexception,command-timeout,Nhibernate,Timeout,Castle Activerecord,Sqlexception,Command Timeout,在我的C.NET3.5应用程序中,我在NHibernate上使用CastleProject ActiveRecord。这是使用MS SQL Server 2008的桌面应用程序。我已将ADO命令超时设置为0,以防止批量操作期间出现超时异常: <activerecord> <config> ... <add key="hibernate.command_timeout" value="0" /> </config

在我的C.NET3.5应用程序中,我在NHibernate上使用CastleProject ActiveRecord。这是使用MS SQL Server 2008的桌面应用程序。我已将ADO命令超时设置为0,以防止批量操作期间出现超时异常:

  <activerecord>
    <config>
      ...
      <add key="hibernate.command_timeout" value="0" />
    </config>
  </activerecord>

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      ...
      <property name="command_timeout">0</property>
    </session-factory>
  </hibernate-configuration>
但是,我仍然收到超时异常!NHibernate日志显示如下内容:

在开始的某个地方:

2010-10-02 06:29:47746信息 NHibernate.Driver.DriverBase-将ADO.NET命令超时设置为0秒

最后的某个地方:

2010-10-02 07:36:03020调试 NHibernate.AdoNet.AbstractBatcher- 关闭IDBS命令,打开IDBS命令: 0 2010-10-02 07:36:03382错误 NHibernate.Event.Default.AbstractFlushingEventListener -无法将数据库状态与会话同步 NHibernate.hibernate异常:一个 执行时发生异常 批处理查询-->系统数据.S qlClient.SqlException:超时 期满。超时时间已过 在操作完成之前 或者服务器没有响应。在 System.Data.SqlClient.SqlConnection.OnErrorSqlException 异常,布尔断开连接


为什么?如何解决此问题?

正确的做法是,值0表示没有超时,而批处理程序的条件是

因此,当设置批处理时,超时值为0,该值不会传递到db命令,因此它仍然是默认值

这完全有可能是出于设计,NHibernate开发人员故意禁用批处理场景的超时。无论如何,禁用超时是个坏主意,如果您遇到超时错误的问题,我会提高该值,但不会禁用它


请与NHibernate开发人员确认这一点。

您可能希望为特定查询设置超时,而不是在web.config级别,否则您确实需要调整应用程序:

我最近发现这个答案对我很有帮助:


我假设这是一个web应用程序?对不起,没有说明这一点。不,这是常规桌面应用程序。是否使用批处理adonet.batch_size>0?为什么有ActiveRecord配置和单独的NHibernate配置?什么样的SQL语句正在超时更新/插入/选择/删除?你使用的是什么版本的NHibernate和ActiveRecord?@Mauricio:是的,我使用的是batch_size=1000。我有两种配置,因为在过去我遇到过这样的情况,一个键在ActiveRecord部分中定义,而另一个键只在Nhibernate中工作,所以我决定同时使用这两种配置,也许这是错误的。语句是insert,批插入。Nhibernate是2.1.2.4000,CastleProject是2.1.0.6692。我有一个理论。。。尝试将batch_size设置为0,然后查看是否仍超时。请将结果发回此处。我试图将超时时间从1000增加到10000,并将批处理大小从1000减少到100,现在我得到了异常NHibernate.TransactionException:事务未连接,或者在批处理操作的随机位置断开了连接。为什么?嗯。。。我再次得到超时异常,这对于如此长的超时值是不可能的。我的一个朋友告诉我,我使用的Nhibernate TransactionScope不使用自定义超时。你知道从配置文件到TransactionScope的超时填充方法吗?@Alex:请发布另一个问题。发布:如何通过fluent nhibernate设置批处理程序连接超时?