我一直在研究使用fluent和syscache2的WCF服务。关于我目前的困境,我几乎都读过关于SO的每一篇文章;我没有运气。
我正在尝试设置二级缓存的到期时间。我设置的任何值似乎都被忽略,默认值为5分钟用于使缓存失效。
流利配置:
注意:contextClass只是一个包含传递给配置的值的描述符类。
var cfg = Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008
.ConnectionString(c => c.Is(connectionString))
.ShowSql()
)
.Diagnostics(d => d.Enable())
.Cache(c => c
.UseQueryCache()
.ProviderClass(typeof(NHibernate.Caches.SysCache2.SysCacheProvider).AssemblyQualifiedName))
.Mappings(m => m
.FluentMappings
.AddFromAssembly(assembly))
.ExposeConfiguration(x =>
{
x.SetProperty(NHibernate.Cfg.Environment.CurrentSessionContextClass, contextClass.Id);
x.SetProperty(NHibernate.Cfg.Environment.PrepareSql, contextClass.PrepareSql); //set prepare_sql true/false
x.SetProperty(NHibernate.Cfg.Environment.CacheDefaultExpiration, contextClass.ExpireL2Cache); //set default expiration in seconds
});
我还将app.config文件设置如下:
<configSections>
<section name="syscache" type="NHibernate.Caches.SysCache2.SysCacheSection, NHibernate.Caches.SysCache2"/>
</configSections>
<syscache>
<cache expiration="600" priority="5" />
</syscache>
app.config有一个变体,它有一个syscache部分,它使用了区域但是也没有用。
有人对想法有任何建议吗?
谢谢
答案 0 :(得分:4)
我总是毫无问题地使用它:
.ExposeConfiguration (cfg => {
cfg.Properties.Add ("expiration", "900");
})
不确定Properties.Add的行为是否与您正在使用的SetProperty调用有任何不同。
看起来如果您使用更新版本的NHibernate,您可以依赖NHibernate.Cfg命名空间中的新扩展方法(这将以流畅的方式替换您的整个.Cache调用)
.ExposeConfiguration (cfg => {
cfg.SessionFactory().Caching.Through<SysCacheProvider>().WithDefaultExpiration(900);
})
做一些阅读我发现this:
cache.default_expiration或expiration(Int32):因为NH Contrib 2.1 cache.default_expiration是应该使用的新设置名称而不是expiration,以指定必须使缓存项无效的秒数。默认值为300秒。为了向后兼容,仍支持旧名称。
所以属性名称可能不是你的问题(现在想知道我使用的“expiration”键是否也特定于memcache提供程序,虽然它似乎与syscache一起工作)。