【问题标题】:NHibernate - Creating a proxy instance failed (on IIS8 but ok with dev server)NHibernate - 创建代理实例失败(在 IIS8 上,但在开发服务器上可以)
【发布时间】:2016-03-07 09:23:54
【问题描述】:

我必须处理已经开发的解决方案,该解决方案将 NHibernate (v1.2.1.4000) 与 SQL Server 2008 结合使用。

由于成员身份验证和其他原因,该应用程序正在使用 .NET Framework 2.0。

这在 Visual Studio 中工作 - 我可以调试它,运行它。但在 IIS (v8.0) 中部署时失败

例外是:

程序集中的类型名称重复。
HibernateException:创建代理实例失败。

每当获取数据库以获取某些模型时,都会发生这种情况。

我已经用谷歌搜索过这个问题,并有一些使用 nhiberante (v3.3.x) 的建议。

但是v3的很多接口和方法参数是不同的。所以它破坏了源代码的实现。

stackoverflow 上存在几个与此相关的问题,但还没有运气

【问题讨论】:

  • 使用 VS 调试时,是使用旧的 Cassini 开发服务器还是使用 IIS Express?如果尚未完成,请切换到 IIS Express 进行调试。
  • @弗雷德里克,谢谢。它正在使用 IIS Express。

标签: c# iis nhibernate .net-2.0


【解决方案1】:

也许您遇到了并发问题,例如单例初始化无法确保其初始化的唯一性,仅在负载下发生。

特别是检查您的会话工厂。构建时放置日志,检查它是否多次构建。如果尚未从那里触发,请尝试从 Application_Start 触发您的单例初始化。

避免单例延迟初始化,除非它们真的很繁重并且大多数应用程序 HTTP 请求都不需要它们。在这种情况下,请确保它们的逻辑是线程安全的并避免运行并发初始化(类似于LazyThreadSafetyModeExecutionAndPublication 而不是PublicationOnly:它需要更严格的锁定,但必须以这种方式来构建ISessionFactory,如果它是通过延迟初始化完成的。)

【讨论】:

  • 这是 NHibernate nhibernate.jira.com/browse/NH-3172 的一个 bug,建议使用 NHibernate 3 或更高版本。我已将解决方案升级到 CLR v4 并使用 NHibernate 4。但现在城堡 (v3.0.0) 无法正常工作,因为 castle.facilities 不支持 v3。
  • Castle 是在 NHibernate 版本 3 之前为 NHibernate 配置的常用代理生成器。NHibernate v3 及更高版本嵌入了自己的代理生成器,不再需要外部代理生成器。
猜你喜欢
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多