托管环境中的asp.net和Castle.Windsor - >无法获取所需的权限

时间:2012-05-02 18:59:26

标签: asp.net iis castle-windsor hosted

我正在开发一个asp.net 3.5 Web应用程序,该应用程序在我的本地IIS服务器上运行完美,但在将其发布到托管(1and1)环境时会让我遇到很多麻烦。

加载web.config时,“System.Security.Policy.PolicyException:无法获取所需的权限”。抛出异常。堆栈跟踪表明这是由于我使用Castle.Windsor框架引起的:

  

[PolicyException:无法获取所需的权限。]
  System.Security.SecurityManager.ResolvePolicy(证据证据,   PermissionSet reqdPset,PermissionSet optPset,PermissionSet denyPset,   的PermissionSet和放大器;否认,布尔检查执行权限)+7606231
  System.Security.SecurityManager.ResolvePolicy(证据证据,   PermissionSet reqdPset,PermissionSet optPset,PermissionSet denyPset,   的PermissionSet和放大器;否认,Int32& securitySpecialFlags,布尔值   checkExecutionPermission)+57

     

[FileLoadException:无法加载文件或程序集'Castle.Windsor,   Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'或   其中一个依赖项。无法授予最低权限请求。   (HRESULT的例外情况:0x80131417)]   System.Reflection.Assembly._nLoad(AssemblyName fileName,String   codeBase,Evidence assemblySecurity,Assembly locationHint,   StackCrawlMark&安培; stackMark,Boolean throwOnFileNotFound,Boolean   forIntrospection)+0 System.Reflection.Assembly.nLoad(AssemblyName   fileName,String codeBase,Evidence assemblySecurity,Assembly   locationHint,StackCrawlMark& stackMark,Boolean throwOnFileNotFound,   布局为内省)+43
  System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,   证据集合安全,StackCrawlMark& stackMark,布尔   forIntrospection)+127
  System.Reflection.Assembly.InternalLoad(String assemblyString,   证据集合安全,StackCrawlMark& stackMark,布尔   forIntrospection)+142 System.Reflection.Assembly.Load(String   assemblyString)+28
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔starDirective)+46

     

[ConfigurationErrorsException:无法加载文件或程序集   'Castle.Windsor,Version = 3.0.0.0,Culture = neutral,   PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一。失败   授予最低权限请求。 (HRESULT的例外情况:   0x80131417)]
  System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串   assemblyName,布尔starDirective)+613
  System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()   +203 System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo   ai)+105
  System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection   compConfig)+178
  System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath   configPath,Boolean supportLocalization,String outputAssemblyName)   +54 System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean   isPrecompiledApp)+232
  System.Web.Compilation.BuildManager.CompileGlobalAsax()+51
  System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()+337

     

[HttpException(0x80004005):无法加载文件或程序集   'Castle.Windsor,Version = 3.0.0.0,Culture = neutral,   PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一。失败   授予最低权限请求。 (HRESULT的例外情况:   0x80131417)]
  System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()   +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()+ 512   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager   appManager,IApplicationHost appHost,IConfigMapPathFactory   configMapPathFactory,HostingEnvironmentParameters hostingParameters)   729

     

[HttpException(0x80004005):无法加载文件或程序集   'Castle.Windsor,Version = 3.0.0.0,Culture = neutral,   PublicKeyToken = 407dd0808d44fbdc'或其依赖项之一。失败   授予最低权限请求。 (HRESULT的例外情况:   0x80131417)] System.Web.HttpRuntime.FirstRequestInit(HttpContext   上下文)+8921851
  System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+85   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest   wr,HttpContext context)+333

由于托管环境限制,我在调查此问题方面非常有限 - 特别是我无法查看machine.config和IIS配置。我确切知道的一个事实是它运行在2.0.50727.5456框架上...托管服务商的客户服务既不能胜任也不愿意提供帮助,所以我必须自己做。

任何有关如何深入了解原因或如何简单解决此问题的建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

我发现1& 1对所有托管的asp.net应用程序使用一般的中等信任级别。似乎Castle Windsor无法在这样的权限限制环境下运行(例如,那里没有反射)。

幸运的是,在这种情况下可以使用很多替代方案(参见which-ioc-runs-in-medium-trust)。我只是使用simple injector这是一个很小的(但我的目的很强大)IoC容器,它做得很好,解决了我所有的许可问题。