Поставщик Memcached для NHibernate не работает - PullRequest
2 голосов
/ 07 января 2010

Я был в этом в течение нескольких дней. Я настроил свою конфигурацию web / app для использования кэша второго уровня с сервером Memcached и провайдером от NHContrib. Пока я не получаю никаких исключений в тестировании, я вижу, что он не использует кеш для моих запросов, которые я установил cacheable = true. Если я переключаю провайдера на NHibernate.Cache.HashtableCacheProvider и проверяю, он работает как положено.

вот соответствующие разделы конфигурации, которые я использую

<configuration>
  <configSections>
  <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate" />
  <section name="memcache" type="NHibernate.Caches.MemCache.MemCacheSectionHandler,NHibernate.Caches.MemCache" />
  </configSections>
  <memcache>
    <memcached host="192.168.215.60" port="11211" />
  </memcache>

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      <property name="connection.provider">
        NHibernate.Connection.DriverConnectionProvider
      </property>
      <property name="dialect">
        MT.Core.Persistence.Dialect, MT.Core
      </property>
      <property name="connection.driver_class">
        NHibernate.Driver.SqlClientDriver
      </property>
      <property name="connection.connection_string">
        Server=192.168.1.1;Initial Catalog=Test;User ID=TestUser;Password=fakepassword;
      </property>
      <property name="show_sql">true</property>
      <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu</property>
      <property name="cache.provider_class">NHibernate.Caches.MemCache.MemCacheProvider,NHibernate.Caches.MemCache</property>
      <!--<property name="cache.provider_class">NHibernate.Cache.HashtableCacheProvider</property>-->
      <property name="cache.use_second_level_cache">true</property>
      <property name="cache.use_query_cache">true</property>
    </session-factory>

  </hibernate-configuration>
</configuration>

Ответы [ 3 ]

2 голосов
/ 20 января 2010

Проблема в конечном итоге связана с проблемой подключения. Я использовал log4net для записи любых ошибок на консоль и в журнал приложений. Тогда я наконец-то увидел ошибки, связанные с подключением к серверу memcached. Как только код был перенесен на сервер в том же месте, ошибки исчезли. Я должен был научиться использовать log4net давным-давно.

2 голосов
/ 09 мая 2011

Для memcache это свойство «default_expiration», а не «expiration». Я не уверен насчет SysCache. Но я использовал это свойство для memcache, и оно работает для меня.

Первоначально я также столкнулся с той же ошибкой, что упомянул CountCet. Атрибут 'expiration' не распознается поставщиком MemCache. Позже я проверил код и обнаружил, что он использует свойство default_expiration и его значение по умолчанию составляет 300 секунд.

0 голосов
/ 07 января 2010

Я думаю, что свойство expiration должно быть установлено для провайдера memcache на уровне фабрики сеансов, а не в конфигурации провайдера, как другие (SysCache)

<property name="expiration">300</property>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...