注意:我也在精彩架构的谷歌群组上发布了这个。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:SharpArch.Core.PreconditionException:一个会话 工厂已经配置了密钥 nhibernate.current_session
来源错误:
第49行:base.Init(); 第50行: 第51行:NHibernateSession.Init(新的WebSessionStorage (这个), 第52行:new string [] {Server.MapPath(“〜/ bin / GCBA.Data.dll“)}); 第53行:}
源文件:C:\ Users \ Matt \ Desktop \ Matt \ GCBA \ GCBA \ GCBA.Web \ Global.asax.cs行:51
堆栈追踪:
[PreconditionException:已配置会话工厂 使用nhibernate.current_session]的键
SharpArch.Core.Check.Require(布尔断言,字符串消息)in C:\的MyStuff \项目\ SharpArchitecture的\ src \ SharpArch \ SharpArch.Core \ DesignByContract.cs:62
SharpArch.Data.NHibernate.NHibernateSession.Init(ISessionStorage storage,String [] mappingAssemblies,AutoPersistenceModel autoPersistenceModel,String cfgFile,IDictionary`2 cfgProperties, String validatorCfgFile,IPersistenceConfigurer persistenceConfigurer) 在C:\ MyStuff \ Projects \ SharpArchitecture \ src \ SharpArch \ SharpArch.Data \ NHibernate的\ NHibernateSession.cs:70
SharpArch.Data.NHibernate.NHibernateSession.Init(ISessionStorage 存储,String [] mappingAssemblies)在C:\ MyStuff \ Projects中 \ SharpArchitecture的\ src \ SharpArch \ SharpArch.Data \ NHibernate的 \ NHibernateSession.cs:26
GC:\ Users \ Matt \ Desktop \ Matt \ GCBA中的GCBA.Web.MvcApplication.Init() \ GCBA \ GCBA.Web \ Global.asax.cs中:51
System.Web.HttpApplication.InitInternal(HttpContext context, HttpApplicationState状态,MethodInfo []处理程序)+335
这是我试图从IIS7运行的错误...我可以正常运行它 好像出了VS2008卡西尼......所以我不确定是什么问题 是的,我有S#arp和MVC.Net 1.0的7/16/2009主干构建。该 它失败的代码片段在global.asax.cs Init()中 方法。我真的很沮丧这个问题,因为我有 只发现了另外一篇关于此的帖子,它是在测试用例中, 我的地方实际上是试图从iis7和所有网站运行网站 我的测试通过了。
如果有人知道可能导致此问题的原因,那就是 太好了谢谢。
答案 0 :(得分:1)
我最近遇到了同样的问题。我使用了S#arp arch但使用了一个普通的asp.net网站项目(集成在cms中)。对我来说,整个问题是Global.asax不会触发未知的文件类型或虚拟URL。我通过编写自己的HttpModule并单独加载它来解决它,这有副作用,即使有人只提取图像,NHibernate也会启动。但对我来说这不是一个问题。
希望这能让你朝着正确的方向前进......
答案 1 :(得分:0)
这听起来似乎没有为ASP.NET MVC正确配置IIS7。 See if this post on SO可帮助您使用ASP.NET MVC设置IIS7。我也在使用SharpArchitecture,在IIS7以“集成”模式运行后,解决了很多问题。
答案 2 :(得分:0)
可能是线程问题?
您是否在应用初始化中尝试过类似的内容:
private static bool haveInit
if (!haveInit)
{
lock (@lock)
{
if (!haveInit))
{
NHibernateSession.Init(...);
haveInit = true;
}
}
}