1
下面是使用流利StructureMap爲什麼我的NHibernate會話僅在Windows服務中有時纔可用?
ISessionFactory sessionFactory = fluentConfig.BuildSessionFactory();
For<Configuration>().LifecycleIs(new HybridLifecycle()).Singleton().Use(configuration);
For<ISessionFactory>().LifecycleIs(new HybridLifecycle()).Singleton().Use(sessionFactory);
For<ISession>().LifecycleIs(new ThreadLocalStorageLifecycle())
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
For<IUnitOfWork>().LifecycleIs(new ThreadLocalStorageLifecycle())
.Use<UnitOfWork>();
的NH會話被封裝在對象的UnitOfWork NH的相關配置。
在我的窗口服務,我每次訪問會話時,它是在這樣的會議調用線程池線程中:
unitOfWork = ObjectFactory.GetInstance<IUnitOfWork>();
...
//Init repositories with the unitOfWork
//Have repos do their thing
...
unitOfWork.Commit();
unitOfWork.Dispose();
當我測試了上面的函數,它總是工作第一我啓動應用程序,但隨時隨地進行工作。它不工作的時間,這是因爲會話爲空。我發現如果在前一個通話結束後大約30秒後等待,下一次通話將會成功。
爲什麼會這樣做?我正在嘗試配置每個線程的會話?
如何不作爲Windows服務運行時,它的工作原理? (即你的開發機器?) - 兩者有什麼不同? – wal
@wal存儲庫代碼通常運行在Web應用程序中,但需要在Windows服務中批量處理一些數據。我在這個新環境中設置時遇到了麻煩(我沒有設置Web項目,NH和StructureMap對我來說是相當陌生的,特別是因爲大多數文檔都是如何在Web應用程序中使用它們的)。 – getit