【问题标题】:nHibernate 3.3.1 System.Security.Permissions.ReflectionPermission ErrornHibernate 3.3.1 System.Security.Permissions.ReflectionPermission 错误
【发布时间】:2023-04-04 15:07:01
【问题描述】:

我正在尝试让我用 ASP.NET 4.0 编写的 Web 应用程序使用中等信任在本地工作。我使用 Go Daddy 作为网络主机,他们在共享主机上使用中等信任。我已经读到 nHibernate 现在可以在 3.3 中开箱即用地与 Medium Trust 站点一起使用,但我终生无法正常工作。

只需添加:

<trust level="Medium" />

在我的 web.config 中,我的 Web 应用程序因以下错误和堆栈跟踪而崩溃:

Request for the permission of type 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark)
   at System.Security.CodeAccessPermission.Demand()
   at System.Reflection.Emit.DynamicMethod.PerformSecurityCheck(Type owner, StackCrawlMark& stackMark, Boolean skipVisibility)
   at System.Reflection.Emit.DynamicMethod..ctor(String name, Type returnType, Type[] parameterTypes, Type owner, Boolean skipVisibility)
   at NHibernate.Bytecode.Lightweight.ReflectionOptimizer.CreateDynamicMethod(Type returnType, Type[] argumentTypes)
   at NHibernate.Bytecode.Lightweight.ReflectionOptimizer.GenerateGetPropertyValuesMethod(IGetter[] getters)
   at NHibernate.Bytecode.Lightweight.ReflectionOptimizer..ctor(Type mappedType, IGetter[] getters, ISetter[] setters)
   at NHibernate.Bytecode.Lightweight.BytecodeProviderImpl.GetReflectionOptimizer(Type mappedClass, IGetter[] getters, ISetter[] setters)
   at NHibernate.Tuple.Entity.PocoEntityTuplizer.SetReflectionOptimizer()
   at NHibernate.Tuple.Entity.PocoEntityTuplizer..ctor(EntityMetamodel entityMetamodel, PersistentClass mappedEntity)
   at NHibernate.Tuple.Entity.EntityEntityModeToTuplizerMapping..ctor(PersistentClass mappedEntity, EntityMetamodel em)
   at NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass, ISessionFactoryImplementor sessionFactory)
   at NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory)
   at NHibernate.Persister.Entity.SingleTableEntityPersister..ctor(PersistentClass persistentClass, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping mapping)
   at NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass model, ICacheConcurrencyStrategy cache, ISessionFactoryImplementor factory, IMapping cfg)
   at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
   at NHibernate.Cfg.Configuration.BuildSessionFactory()
   at NHibernate.DataAccess.WebTest.Code.NHibernateHelper.get_SessionFactory()
   at NHibernate.DataAccess.WebTest.Code.NHibernateHelper.OpenSession()
   at NHibernate.DataAccess.WebTest._Default.Page_Load(Object sender, EventArgs e)
   at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
   at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

这似乎与我读到的错误相同,但到目前为止我发现的所有修复程序似乎都没有对我有用。我什至尝试过 NHibernate.DependencyInjection Nuget 包,但错误是相同的错误,但堆栈跟踪不同,这发生在 Initializer ctor 中。

我觉得我错过了一些明显的东西来完成这项工作,但我不能指望它。有没有人以中等信任度成功运行 nHibernate 3.3.1?

【问题讨论】:

    标签: asp.net nhibernate medium-trust


    【解决方案1】:

    我可以通过关闭 ado 批处理来完成这项工作。我在这里找到了答案,http://blog.ondrejsv.com/post/N2CMS-NHibernate-SqlCommandSet-and-medium-trust.aspx。警告,我还没有将它迁移到生产环境;这只是在我的笔记本电脑上(YMMV)。

    <property name="adonet.batch_size">0</property>
    

    我尝试了 NHibernate.DependencyInjection 包,但没有成功。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      我通过我的中等信任提供商使用开箱即用的 NH 3.3.1。但是,可能还有其他东西可以帮助您。通过 Ranzlee 安装此 package:-

      PM> Install-Package NHibernate.DependencyInjection
      

      要启动并运行它,只需使用

      protected void Application_Start() {
        Initializer.RegisterBytecodeProvider();
        ...
        Rest of configuration code here
      }
      

      【讨论】:

        猜你喜欢
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多