un'eccezione di timeout quando timeout impostato per un tempo infinito
-
27-09-2019 - |
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?
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