我正在使用带有 NHibernate 的 C#.NET 3.5 Web 应用程序。在开发环境中一切正常,但是当我在 IIS 中部署应用程序时,出现以下异常:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
SVC_Cadu_Dal.Helper.NHibernateHelper.get_SessionFactory() in C:\workspace\SVC_Applications\cadu\SVC_Cadu\SVC_Cadu_Dal\Helper\NHibernateHelper.cs:73
SVC_Cadu_Dal.Helper.NHibernateHelper.OpenSession() in C:\workspace\SVC_Applications\cadu\SVC_Cadu\SVC_Cadu_Dal\Helper\NHibernateHelper.cs:82
SVC_Cadu.PessoaPage.initDropDownList(DropDownList ddl, Type type) in C:\workspace\SVC_Applications\cadu\SVC_Cadu\SVC_Cadu\PessoaPage.aspx.cs:84
SVC_Cadu.PessoaPage.initComponents() in C:\workspace\SVC_Applications\cadu\SVC_Cadu\SVC_Cadu\PessoaPage.aspx.cs:66
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +52
System.Web.UI.Control.OnLoad(EventArgs e) +137
System.Web.UI.Control.LoadRecursive() +98
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2524
这是我的 NHibernateHelper 类:
public class NHibernateHelper {
private static ISessionFactory sessionFactory;
private static ISession session;
private static ISessionFactory SessionFactory {
get {
if(sessionFactory == null) {
try {
var config = new Configuration();
// ----------------------------------------------------
// Configuration for DEVELOPMENT and PRODUCTION envs.
config.Configure(Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"bin\\hibernate.cfg.xml"));
// ----------------------------------------------------
HbmSerializer.Default.Validate = true;
//log4net.Config.XmlConfigurator.Configure();
sessionFactory = config.BuildSessionFactory();
} catch(Exception e) {
throw(e.InnerException);
}
}
return sessionFactory;
}
}
public static ISession OpenSession() {
return session != null && session.IsOpen ? session
: session = SessionFactory.OpenSession();
}
}
我的解决方案如下所示:
- Solution
- WebApp <project>
- Dal <project>
- "Mappings" <folder>
- hibernate.cfg.xml (Embedded Resource, Copy Always) <file>
- Helpers <folder>
- NHibernateHelper.cs
- Model <project>
- "Models" <classes>
- (...)
其他重要信息是我正在使用 XML 映射(不是流利或类映射)。我已经尝试过:
- 将“hibernate.cfg.xml”内容放在“Web.config”文件中(当然,在“config.Configure()”方法中更改参数;
- 不向“config.Configure()”方法传递任何值;
- 将硬编码字符串放入“config.Configure()”,例如“config.Configure("bin\hibernate.cfg.xml");
- 哭
我不明白为什么我的 NHibernate 配置在开发中有效,但在生产中无效。我究竟做错了什么?