C# Nhibernate不在生产环境中工作

C# Nhibernate不在生产环境中工作,c#,nhibernate,iis,C#,Nhibernate,Iis,我正在使用带有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 tr

我正在使用带有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>
    - (...)
-解决方案
-网络应用
-达尔
-“映射”
-hibernate.cfg.xml(嵌入式资源,始终复制)
-助手
-NHibernateHelper.cs
-模型
-“模型”
- (...)
另一个重要信息是,我使用的是XML映射(不是流畅的映射或类映射)。 我已经试过了:

  • 将“hibernate.cfg.xml”内容放在“Web.config”文件中(当然,还要更改“config.Configure()”方法中的参数
  • 不向“config.Configure()”方法传递任何值
  • 将硬编码字符串放入“config.Configure()”,如“config.Configure”(“bin\hibernate.cfg.xml”)
  • 叫喊

我不明白为什么我的NHibernate配置在开发中有效,但在生产中无效。我做错了什么?

为什么不使用HttpContext.Current.Server.MapPath来获取服务器中的文件路径


还要检查要执行和读取的文件夹权限,可能应用程序池中配置的用户没有在bin文件夹中读取的权限。您是否已尝试将nhibernate.cfg.xml放入其他文件夹,可能放入App_data等其他文件夹中?

为什么不使用HttpContext.Current.Server.MapPath获取服务器中的文件路径


还要检查要执行和读取的文件夹权限,可能应用程序池中配置的用户没有在bin文件夹中读取的权限。您是否已尝试将nhibernate.cfg.xml放入其他文件夹,可能放入App_data等其他文件夹?

HttpContext.Current.Server.MapPath(“bin\hibernate.cfg.xml”)工作起来很有魅力!谢谢。但对我来说这似乎有点夸张,因为我的NHibernateHelper类在“Dal”(库)项目中。我将尝试其他技巧。现在我遇到另一个错误:登录失败,因为我使用的是“Integrated Security=SSPI”选项。但这没关系,我可以处理。再次感谢!HttpContext.Current.Server.MapPath(“bin\hibernate.cfg.xml)很有魅力!谢谢。但对我来说这似乎有点太夸张了,因为我的NHibernateHelper类在“Dal”(库)项目中。我将尝试其他技巧。现在我遇到另一个错误:登录失败,因为我使用了“Integrated Security=SSPI”选项。但没关系,我可以处理。再次感谢!