让NHibernate在中等信任的共享主机上工作

时间:2012-05-02 17:42:28

标签: c# asp.net nhibernate shared-hosting medium-trust

一位朋友在我的计算机本地使用了NHibernate,在我从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上有一个guide,告诉他关闭Reflection Optimiser。我找不到怎么做,但我怀疑你根本无法在VS2010的 ASP.NET网站中完成任务。 SO上的其他人建议首先将其转换为 ASP.NET Web应用程序,在那里您可以更好地控制程序集引用。

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

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

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

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

  4. 我知道一次不能提出多个问题,但这些问题非常相关,我觉得所有问题都有一个答案。

    感谢任何帮助。如果你需要完整的堆栈跟踪,我会发布它。

1 个答案:

答案 0 :(得分:1)

请参阅此blog post以及this one。我需要在使用Medium Trust的Rackspace云上使用NH3.2。您需要做的就是运行此Nuget命令,它应该下载正确的程序集(您可能需要首先删除现有的NH dll)。

PM> Install-Package NHibernate.DependencyInjection

可以找到here的nuget包装。

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

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

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

相关问题