NServiceBus の 2.0 RTM を実行していますが、MessageModule が CurrentSessionContext を NHibernate sessionfactory にバインドすると、NullReferenceException が発生します。
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;
}
}
私のログを見ると、bind メソッドが呼び出されたときに次のエラーが記録されています。
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)
どうやら、HttpContext へのアクセスに問題があるようです。NServiceBus を構成するためのこの呼び出しは、Application_Start よりもライフサイクルの後半に発生する必要がありますか? または、Asp.NET Web アプリケーション内でハンドラーを動作させるために他の人が使用した別の回避策はありますか?
ありがとう、スティーブ