nHibernate 3.3.1 System.Security.Permissions.ReflectionPermission Ошибка
Я пытаюсь заставить свое веб-приложение, написанное на ASP.NET 4.0, работать локально, используя среднее доверие. Я использую Go Daddy в качестве веб-хостинга, и они используют среднее доверие на своих хостах. Я читал, что nHibernate теперь работает с сайтами Medium Trust из коробки из 3.3, но я не могу заставить себя работать.
Просто добавив:
<trust level="Medium" />
на мой web.config мое веб-приложение взрывается со следующей ошибкой и трассировкой стека:
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)
Кажется, это та же самая ошибка, о которой я читал, но ни одно из исправлений, которые я нашел до сих пор, не показалось мне подходящим. Я даже пробовал пакет Nuget NHibernate.DependencyInjection, но он выдает ошибку с той же ошибкой, но с другой трассировкой стека, которая происходит в ctor в Initializer.
Мне кажется, что я упускаю что-то очевидное, чтобы получить эту работу, но я не могу это понять. У кого-нибудь были успехи при запуске nHibernate 3.3.1 со средним уровнем доверия?
2 ответа
Я смог заставить это работать, отключив дозирование. Я нашел ответ здесь, http://blog.ondrejsv.com/post/N2CMS-NHibernate-SqlCommandSet-and-medium-trust.aspx. Предупреждение, я еще не перенес это в производство; это только на моем ноутбуке (YMMV).
<property name="adonet.batch_size">0</property>
Я попробовал пакет NHibernate.DependencyInjection, и он не сработал.
Надеюсь это поможет.
Я использую NH 3.3.1 из коробки с моим поставщиком среднего доверия. Однако может быть что-то еще, чтобы помочь вам. Установите этот пакет от Ranzlee:-
PM> Install-Package NHibernate.DependencyInjection
Чтобы запустить его, просто используйте
protected void Application_Start() {
Initializer.RegisterBytecodeProvider();
...
Rest of configuration code here
}