J'essaie de trouver ce qui semble être un problème de mise en cache et je n'arrive pas à trouver de réponses. Ce que j'ai:NServicebus & NHibernate caching issue
Une série de 5 gestionnaires de messages pour traiter une 'commande' de notre site ASP.NET MVC. Je devrais noter, le comportement noté ci-dessous a été vu quand le processus était un gestionnaire de message. Je l'ai cassé pour le sécher.
Les gestionnaires sont les suivants:
- OrderCompleteHandler -
- CreateArtifact1Handler -
- CreateArtifact2Handler -
- RESTIntegrationHandler -
- EMailHandler fait
Le processus fonctionne bien, tout est grand avec une grande mise en garde: Si l'une des données persistantes dans la base de données est modifiée dans le site, les gestionnaires de nservicebus ne voient pas les données réfléchies lors du retraitement des mêmes gestionnaires pour le (s) même (s) enregistrement (s).
Nous avons mis en place un IMessageModule w/le code suivant:
public void HandleBeginMessage()
{
CurrentSessionContext.Bind(SessionFactory.OpenSession());
}
Si je redémarre le servicebus, les modifications de données sont correctement reflétées, ce qui me fait (peut-être à tort) à une mauvaise quelque chose configuré dans le côté servicebus.
NServiceBus Configuration:
return Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2005
.CurrentSessionContext("NHibernate.Context.ThreadStaticSessionContext, NHibernate")
.ConnectionString(c => c.FromAppSetting("connection.string"))
.ProxyFactoryFactory("NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle")
.ShowSql())
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<UserMapping>();
m.FluentMappings.Conventions.AddFromAssemblyOf<EnumConvention>();
})
.ExposeConfiguration(cfg =>
{
cfg.EventListeners.PostInsertEventListeners = new IPostInsertEventListener[] { new AuditLogEventListener() };
cfg.EventListeners.SaveEventListeners = new ISaveOrUpdateEventListener[] { new AuditLogEventListener() };
cfg.SetProperty("cache.provider_class", "NHibernate.Cache.HashtableCacheProvider");
cfg.SetProperty("cache.use_second_level_cache", "true");
cfg.SetProperty("cache.use_query_cache", "true");
})
.BuildSessionFactory();
Configuration Web:
return Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2005
.Cache(c => c
.UseQueryCache()
.ProviderClass<SysCacheProvider>())
.CurrentSessionContext("NHibernate.Context.ManagedWebSessionContext, NHibernate")
.ConnectionString(c => c
.FromAppSetting("connection.string"))
.ProxyFactoryFactory("NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle")
.ShowSql())
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<UserMapping>();
m.FluentMappings.Conventions.AddFromAssemblyOf<EnumConvention>();
})
.ExposeConfiguration(cfg =>
{
cfg.EventListeners.PostInsertEventListeners = new IPostInsertEventListener[] { new AuditLogEventListener() };
cfg.EventListeners.SaveEventListeners = new ISaveOrUpdateEventListener[] {new AuditLogEventListener()};
})
.BuildSessionFactory();
Ma question est: Que puis-je manqué?
Merci
Je vais devoir essayer. Merci pour le conseil et le lien. Je reviendrai quand je saurai quelque chose. – DevSolo