Domanda

Nel mio C # .NET 3.5 applicazione sto usando CastleProject ActiveRecord sopra NHibernate. Si tratta di un'applicazione desktop con MS SQL Server 2008. Ho timeout impostato il comando ADO a 0 per evitare un'eccezione di timeout durante le operazioni di massa:

  <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>

Comunque, sto ancora ricevendo un'eccezione di timeout! Il NHibernate spettacoli di registro qualcosa di simile:

Da qualche parte all'inizio:

  

2010-10-02 06: 29: 47.746 INFO   NHibernate.Driver.DriverBase - l'impostazione dei comandi ADO.NET timeout a 0 secondi

Da qualche parte alla fine:

  

2010-10-02 07: 36: 03.020 DEBUG   NHibernate.AdoNet.AbstractBatcher -   Chiuso IDbCommand, aperta IDbCommand S:   0 2010-10-02 07: 36: 03.382 ERROR   NHibernate.Event.Default.AbstractFlushingEventListener   - Impossibile syn stato del database chronize con sessione   NHibernate.HibernateException: An   Si è verificata un'eccezione durante l'esecuzione   query lotti ---> System.Data.S   qlClient.SqlException: Timeout   scaduto. Il periodo di timeout trascorso   il completamento al priore della zione dell'opera   o il server non risponde. a   System.Data.SqlClient.SqlConnection.OnError (SqlException   eccezione, breakConnection booleano)

Come mai? Come risolvere questo problema?

È stato utile?

Soluzione

E 'vero che un valore 0 indica nessun timeout (come definito nella documentazione MSDN ), tuttavia mentre autista di NHibernate passa il valore di configurazione al comando db quando è> = 0 , le condizioni del dosatore controlla che il valore è> 0 .

Di conseguenza, quando si imposta il dosaggio su, con un valore di timeout di 0, il valore non è riportato al comando db così rimane come default.

E 'del tutto possibile che questo è in base alla progettazione, e gli sviluppatori che NHibernate volutamente disabilitato disattivando i timeout per gli scenari batch. La disattivazione timeout è una cattiva idea in ogni caso, se avete problemi con errori di timeout vorrei aumentare il valore, ma non si disattiva esso.

Si prega di confermare questo con sviluppatori NHibernate.

Altri suggerimenti

Si potrebbe essere in cerca di impostare il timeout per le query specifiche e non a livello web.config (altrimenti si ha realmente bisogno per sintonizzare la vostra applicazione :)).

Recentemente ho trovato questa risposta che mi ha aiutato:

Come impostare NHibernate LINQ Command Timeout utilizzando Session .Query

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top