我運行的是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應用程序中工作嗎?
謝謝你,史蒂夫
謝謝Mauricio,我會給它一個鏡頭。 – SteveBering 2010-04-29 14:37:12
@SteveBering:我敢打賭,有人已經實現了我所描述的 – 2010-04-29 14:59:57
@MauricioScheffer:[是的,有](http://stackoverflow.com/a/5871088/163507)。 – Rolf 2013-07-29 13:35:43