2010-04-28 39 views
1

我運行的是NServiceBus的2.0 RTM,當我的MessageModule將CurrentSessionContext綁定到我的NHibernate sessionfactory時,我得到一個NullReferenceException異常。在Web應用程序中初始化NServiceBus時的NullReferenceException Application_Start方法

從我的Application_Start內,我叫下面的方法:

public static void WithWeb(IUnityContainer container) 
{ 
    log4net.Config.XmlConfigurator.Configure(); 

    var childContainer = container.CreateChildContainer(); 

    childContainer.RegisterInstance<ISessionFactory>(NHibernateSession.SessionFactory); 

    var bus = NServiceBus.Configure.WithWeb() 
     .UnityBuilder(childContainer) 
     .Log4Net() 
     .XmlSerializer() 
     .MsmqTransport() 
     .IsTransactional(true) 
     .PurgeOnStartup(false) 
     .UnicastBus() 
     .ImpersonateSender(false) 
     .LoadMessageHandlers() 
     .CreateBus(); 

    var activeBus = bus.Start(); 

    container.RegisterInstance(typeof(IBus), activeBus); 
} 

當總線開始時,我的短信模塊開始下列要求:

public void HandleBeginMessage() 
{ 
    try 
    { 
     CurrentSessionContext.Bind(_sessionFactory.OpenSession()); 
    } 
    catch (Exception e) 
    { 
     _log.Error("Error occurred in HandleBeginMessage of NHibernateMessageModule", e); 
     throw; 
    } 
} 

在看我的日誌,我們當綁定方法被調用時記錄下列錯誤:

System.NullReferenceException: Object reference not set to an instance of an object. 
at NHibernate.Context.WebSessionContext.GetMap() 
at NHibernate.Context.MapBasedSessionContext.set_Session(ISession value) 
at NHibernate.Context.CurrentSessionContext.Bind(ISession session) 

顯然,th ere在獲得對HttpContext的訪問權限時遇到了一些問題。這個配置NServiceBus的調用是否應該在Application_Start的生命週期後面進行?還是有另一種解決方法,其他人已經使用它來獲取處理程序在Asp.NET Web應用程序中工作嗎?

謝謝你,史蒂夫

回答

1

我不會在這種情況下使用WebSessionContext,正是因爲NServiceBus可以獨立HttpContexts的操作。如果您希望爲web和NServiceBus消息處理使用單個會話上下文實現,那麼我將實現帶有混合存儲的NHibernate.Context.ICurrentSessionContext,即如果HttpContext.Current!= null,則使用HttpContext作爲會話存儲。否則使用線程本地存儲。這與Castle ActiveRecord的HybridWebThreadScopeInfo類似。

+0

謝謝Mauricio,我會給它一個鏡頭。 – SteveBering 2010-04-29 14:37:12

+0

@SteveBering:我敢打賭,有人已經實現了我所描述的 – 2010-04-29 14:59:57

+0

@MauricioScheffer:[是的,有](http://stackoverflow.com/a/5871088/163507)。 – Rolf 2013-07-29 13:35:43

相關問題