Question

Dans mon C # .NET 3.5 Application J'utilise CastleProject ActiveRecord sur NHibernate. C'est une application de bureau en utilisant MS SQL Server 2008. J'ai régler le délai d'instruction de ADO à 0 pour éviter de dépassement de délai lors des opérations en vrac:

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

Cependant, je reçois encore de dépassement de délai! Le journal affiche NHibernate quelque chose comme ceci:

Quelque part au début:

  

2010-10-02 06: 29: 47746 INFO   NHibernate.Driver.DriverBase - réglage de délai d'attente de commande ADO.NET à 0 secondes

Quelque part à la fin:

  

2010-10-02 07: 36: 03020 DEBUG   NHibernate.AdoNet.AbstractBatcher -   Fermé IDbCommand, IDbCommand ouvert s:   0 02/10/2010 07: 36: 03.382 erreur   NHibernate.Event.Default.AbstractFlushingEventListener   - Impossible syn état de base de données chronize avec la session   NHibernate.HibernateException: Un   exception a eu lieu lors de l'exécution   requêtes batch ---> System.Data.S   qlClient.SqlException: Délai d'attente   expiré. Le délai écoulé   avant la fin de l'opéra tion   ou le serveur ne répond pas. à   System.Data.SqlClient.SqlConnection.OnError (SqlException   exception, Boolean breakConnection)

Comment venir? Comment résoudre ce problème?

Était-ce utile?

La solution

Il est exact que la valeur 0 indique aucun délai (comme défini dans la documentation MSDN ), mais alors que le pilote de NHibernate passe la valeur de configuration à la commande db quand elle est en> = 0 , l'état du Doseur vérifie que la valeur est> 0 .

Par conséquent, lorsque vous définissez Batching sur, avec une valeur de délai d'attente de 0, la valeur est reportée à la commande db il reste par défaut.

Il est tout à fait possible que ce soit par la conception, et que les développeurs NHibernate intentionnellement désactivé désactiver les délais d'attente pour les scénarios de traitement par lots. La désactivation de délai d'attente est une mauvaise idée de toute façon, si vous avez des problèmes avec des erreurs de temporisation j'augmenter la valeur, mais pas le désactiver.

S'il vous plaît confirmez avec devs NHibernate.

Autres conseils

Vous cherchez peut-être de définir le délai d'attente pour les requêtes spécifiques et non au niveau web.config (sinon vous avez vraiment besoin de régler votre application :)).

Je l'ai récemment trouvé cette réponse qui m'a aidé:

Comment définir Nhibernate LINQ Commande délai d'attente à l'aide de session .query

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top