创建代理实例失败 - 为什么在使用NHibernate 1.2和Castle.DynamicProxy 1.1.5的Windows Server 2012,IIS8上出现此错误?

时间:2014-04-23 19:06:53

标签: asp.net sql-server visual-studio nhibernate visual-studio-2008

我的公司需要将多个网站从Windows 2008服务器移动到Windows 2012服务器。数据库:SQL Server 2008 R2和2012.

使用NHibernate 1.2.0.4000和Castle.DynamicProxy 1.1.5.0的网站已经使用了很长时间。应用程序池设置为.NET Framework v2.0和经典模式。在新服务器上,我们在第一次尝试创建持久对象时收到此错误:

  

Application_Error:UserAgent:Mozilla / 5.0(Windows NT 6.1; WOW64; Trident / 7.0; rv:11.0),如Gecko - 名称:InternetExplorer - 版本:11.0 - UserHostAddress:xxx.xxx.xxx.xxx - 例外:系统。 AccessViolationException:尝试读取或写入受保护的内存。这通常表明其他记忆已损坏   在System.Reflection.Emit.TypeBuilder._TermCreateClass(Int32句柄,模块模块)
  在System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
  在System.Reflection.Emit.TypeBuilder.CreateType()
  在Castle.DynamicProxy.Builder.CodeBuilder.AbstractEasyType.BuildType()
  在Castle.DynamicProxy.Builder.CodeBuilder.AbstractEasyType.BuildType()
  在Castle.DynamicProxy.Builder.CodeGenerators.BaseCodeGenerator.CreateType()
  在Castle.DynamicProxy.Builder.CodeGenerators.ClassProxyGenerator.GenerateCode(类型baseClass,Type []接口)
  在Castle.DynamicProxy.Builder.DefaultProxyBuilder.CreateClassProxy(键入theClass,Type []接口)
  在Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(类型baseClass,Type []接口,IInterceptor拦截器,布尔checkAbstract,Object [] argumentsForConstructor)
  在NHibernate.Proxy.CastleProxyFactory.GetProxy(对象id,ISessionImplementor会话)

     

消息:创建代理实例失败 - 来源:NKU.Model- TargetSite:System.Object Get(System.Type,System.Object) -
  堆栈跟踪:
  at NKU.Model.VZBaseDataAccess.Get(Type type,Object id)在C:\ Visual Studio 2008 \ Projects \ NKU.Model \ NKU.Model \ VZBaseDataAccess.cs:第181行
  at ASP.global_asax.Session_Start(Object sender,EventArgs e)位于c:\ inetpub \ wwwroot \ NKUWeb \ Global.asax:第113行
  在System.Web.SessionState.SessionStateModule.RaiseOnStart(EventArgs e)
  在System.Web.SessionState.SessionStateModule.CompleteAcquireState()
  在System.Web.SessionState.SessionStateModule.BeginAcquireState(对象源,EventArgs e,AsyncCallback cb,Object extraData)
  在System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
  在System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)

1 个答案:

答案 0 :(得分:0)

对我来说,下面的事情是有效的:

在IIS中,转到应用程序池并选择高级设置。在那里你会发现一个功能(通用)'启用32位应用程序'。选择“真实”。 试一试。