Changement De NHibernate Session.Enregistrer la commande timeout

Nous avons un couple de long cours d'exécution en arrière-fin de processus qui prennent plus de temps que la valeur par défaut de 30 secondes.

Notre NHibernate version est 2.0.1.4000 et Spring.NET est 1.2.0.20313.
NHibernate est configuré par le biais de Spring.NET de cette façon:

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

Pour contourner ce problème, je suis en train de mettre la NHibernate command_timeout à 60 ans dans le Web.config.
C'est à partir du Web.config:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="command_timeout">60</property>
  </session-factory>
</hibernate-configuration>

Malheureusement cela ne fonctionne pas, la commande s'éteint après 30 secondes.

J'ai construit une application console qui appelle la DAO comme la web app t-il. J'ai exactement le même NHibernate paramètre de configuration dans le fichier de configuration. Le IDbCommand après 60 secondes au lieu de 30, à l'aide du paramètre avec succès à partir du fichier de configuration.

J'ai essayé de débogage de l'application et vérifier si le commandTimeout a été défini lors de la DAO assemblée est appelée à partir du site web. Il était.

C'est à partir de Visual Studio watch:

((NHibernate.Le pilote.DriverBase)(((NHibernate.Connexion.DriverConnectionProvider)
((NHibernate.Impl.SessionFactoryImpl)session.SessionFactory)
.ConnectionProvider).Le pilote)).commandTimeout: 60

La session est créée comme ceci:

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

Ma question est: si la commande champ délai d'expiration a été correctement fixé à 60 à partir de mon site Web.config, pourquoi est-il au bout de 30 secondes? Toutes les idées que je pourrais essayer?

Il serait utile si vous avez posté un petit exemple d'application qui reproduit le problème. L'écriture de ce petit échantillon app peut le rendre clair pour vous pourquoi cela ne fonctionne pas.
Excellente idée, mais je l'ai déjà. J'ai construit une application console pour reproduire le problème, mais l'application console qui fonctionne et la web app ne fonctionne pas.

OriginalL'auteur adomokos | 2010-02-24