Изменение Сессии NHibernate. Сохраните тайм-аут команды

У нас есть несколько длительных процессов бэкенда, которые занимают больше времени, чем значение по умолчанию 30 секунд.

Наша версия NHibernate 2.0.1.4000, и Spring.NET 1.2.0.20313. NHibernate настроен через Spring.NET этот путь:

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

Для обхождения этого я пытаюсь установить NHibernate command_timeout на 60 в Web.config. Это от Web.config:

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

К сожалению, это не работает, команда испытывает таймаут после 30 секунд.

Я создал консольное приложение, которое называет ДАО точно так же, как веб-приложение делает это. У меня есть тот же самый параметр конфигурации NHibernate в его конфигурационном файле. IDbCommand испытывает таймаут после 60 секунд а не 30, с помощью установки успешно из файла конфигурации.

Я пытался отладить приложение и проверку, если commandTimeout был установлен, когда блок ДАО называют с веб-сайта. Это было.

Это от часов Visual Studio:

((NHibernate. Драйвер. DriverBase) (((NHibernate. Соединение. DriverConnectionProvider) ((NHibernate. Impl. SessionFactoryImpl) сессия. SessionFactory).ConnectionProvider).Driver)) .commandTimeout: 60

Сессия создается как это:

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

Мой вопрос: если поле тайм-аута команды было успешно установлено на 60 от моего Web.config, почему это испытывает таймаут после 30 секунд? Какие-либо идеи я мог попробовать?

12
задан ChrisWue 1 July 2013 в 21:55
поделиться

1 ответ

Это практически невозможно из-за плохой поддержки браузера. Вы можете упаковывать их в tar или застежку -молнию файл на стороне сервера и обслуживать архивный файл, хотя.

-121--4561319-

Это метка порядка байтов. http://en.wikipedia.org/wiki/Byte_order_mark

Меткой порядка байтов (BOM) является Юникод символ, используемый для сигнализации endianness (порядок байтов) текстового файла или поток.

-121--3941893-

Тайм-аут можно установить как часть свойства hibernate.connection.connection_string. Я не использовал Spring.Net, поэтому я не уверен, как он настраивает фабрику сеансов NHibernate. Если в последовательность подключения можно добавить значение «Connect Timeout = 120». Это приведет к увеличению времени ожидания с 30 секунд по умолчанию до 120 секунд.

Следующая строка появится в web.config :

<property name="connection.connection_string">Server=localhost;initial catalog=nhibernate;User Id=;Password=; Connect Timeout=120;</property>

EDIT

Оказалось, что фактически имеется два тайм-аута. Спасибо адомокосу, что указал на это. Один - для фактического открытия соединения, а другой - для выполняемых запросов.

Выше отображается сообщение для подключения, однако для установки тайм-аута для запроса с NHibernate используется интерфейс ICriteria .

ICriteria crit = session.CreateCriteria(typeof(Foo)); 
crit.SetTimeout(120); 
List<Foo> fooList = crit.List();

Время ожидания в секундах.

Надежда, что поможет

11
ответ дан 2 December 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: