2

一位朋友在他的计算机上本地使用 NHibernate 制作了一个 ASP.NET 网站,并在我从 SVN 存储库下载它之后在我的计算机上使用它。但是,我们正在尝试将其托管在具有中等信任级别的共享托管环境中。服务器给出以下异常(部分堆栈跟踪):

[SecurityException: Request for the permission of type 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
   System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark) +31
   System.Security.CodeAccessPermission.Demand() +46
   System.Reflection.Emit.DynamicMethod.PerformSecurityCheck(Type owner, StackCrawlMark& stackMark, Boolean skipVisibility) +166
   System.Reflection.Emit.DynamicMethod..ctor(String name, Type returnType, Type[] parameterTypes, Type owner, Boolean skipVisibility) +40
   NHibernate.Bytecode.Lightweight.ReflectionOptimizer.CreateDynamicMethod(Type returnType, Type[] argumentTypes) in ReflectionOptimizer.cs:104

与反思有关。NHforge.org 上有一个指南,告诉您关闭反射优化器。我找不到如何做到这一点,但我怀疑你根本无法在 VS2010的ASP.NET 网站中做到这一点。SO 上的其他人建议首先将其转换为ASP.NET Web 应用程序,您可以在其中对程序集引用进行更多控制。

问题是网站(这是一个学校项目)的截止日期已经是下周五了。我们还没有学习任何类型的 ORM,但我们希望它可以为我们节省大量时间。我想提出3个问题:

  1. 鉴于例外情况以及它是具有中等信任度的共享主机这一事实,我们是否可能让 NHibernate 在相当长的时间内工作?

  2. 我们如何将我们的网站转换为 Web 应用程序?

  3. 我们还需要采取哪些进一步的措施?

我知道实际上不允许一次问多个问题,但这些问题非常相关,我觉得所有问题都有一个答案。

任何帮助表示赞赏。如果您需要完整的堆栈跟踪,我会发布它。

4

1 回答 1

1

请参阅这篇博文这篇博文。我需要在使用中等信任的 Rackspace 云上使用 NH3.2。您需要做的就是运行这个 Nuget 命令,它应该会下载正确的程序集(您可能需要先删除现有的 NH dll)。

PM> Install-Package NHibernate.DependencyInjection

可以在此处找到的 nuget 包。

然后将此代码放入您的应用程序中:-

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

看起来 Randy 已将其更新为与 NH3.3 一起使用。

于 2012-05-02T17:54:01.573 回答