虚拟主机上asp.net运行权限不足问题及解决
来源:互联网 发布:js数组splice用法 编辑:程序博客网 时间:2024/05/22 08:05
有些时候我们写的asp.net应用程序是运行在虚拟主机上。有一些虚拟主机可能是由于安全的考虑,对asp.net做了权限设置,会导致我们的应用程序无法正常运行。
问题现象:
由于某种原因,asp.net不能加载某些dll文件,出现如下错误提示: Server Error in '/' Application.
---------------------------------------------
Required permissions cannot be acquired.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Security.Policy.PolicyException: Required permissions cannot be acquired.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[PolicyException: Required permissions cannot be acquired.]
System.Security.SecurityManager.ResolvePolicy(Evidence evidence, PermissionSet reqdPset, PermissionSet optPset, PermissionSet denyPset, PermissionSet& denied, Boolean checkExecutionPermission) +2738293
System.Security.SecurityManager.ResolvePolicy(Evidence evidence, PermissionSet reqdPset, PermissionSet optPset, PermissionSet denyPset, PermissionSet& denied, Int32& securitySpecialFlags, Boolean checkExecutionPermission) +57
[FileLoadException: Could not load file or assembly 'Microsoft.Practices.ObjectBuilder, Version=1.0.51205.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. Failed to grant minimum permission requests. (Exception from HRESULT: 0x80131417)]
System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +211
System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +141
System.Reflection.Assembly.Load(String assemblyString) +25
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +32
问题分析:
根据我的观察,asp.net应用程序直接生成的dll可以正常加载,由asp.net直接调用的外部dll也可以正常加载,但是仅被外部dll引用的其他外部dll不能加载。我的猜想是:由于权限是不完全的,asp.net应用本身生成的dll和直接引用的dll可以通过权限的继承获得权限,而仅被外部dll引用的其他外部dll因为权限的限制不能继承权限,因此出现了权限不足的问题。
问题解决:
通过在我电脑的试验,推测虚拟主机上修改了根web.config(在我电脑上其位置为C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG)的设置.
默认web.config的权限设置节如下:
<location allowOverride="true">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low" policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
</securityPolicy>
<trust level="Full" originUrl="" />
</system.web>
</location>
推测虚拟主机上修改之后的设置:
<location allowOverride="false">
<system.web>
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low" policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config" />
</securityPolicy>
<trust level="High" originUrl="" />
</system.web>
</location>
他首先设置了allowOverride为false,这就阻止了在用户web.config中重新定义权限的能力。然后,他定义trust level为High,而不是默认的Full。经我测试,只要trust level不为Full,仅被外部dll引用的其他外部dll就不能被加载。 因此,我建议技术支持将allowOverride节设置为true。这样我就可以在web.config中重新指定权限了。
例:<trust level="Full" originUrl="" />
- 虚拟主机上asp.net运行权限不足问题及解决
- 虚拟主机上asp.net运行权限不足问题及解决
- 虚拟主机上asp.net运行权限不足问题及解决
- 虚拟主机上asp.net运行权限不足问题及解决
- 解决asp.net页面插入数据时权限不足问题
- asp.net项目运行的权限问题
- 运行bash 说权限不足的问题
- linux上运行空间不足解决
- ASP.NET权限解决
- asp.net 调用 生成word 后excel 权限不足的问题的一些使用经验
- 虚拟主机上用Asp.net实现Urlrewrite
- 虚拟主机上用ASP.Net实现UrlRewrite
- 虚拟主机上用Asp.net实现Urlrewrite
- 虚拟主机上用Asp.net实现Urlrewrite .
- 运行asp.net服务器权限设置的6个问题
- 解决ASP.NET 中目录访问权限的问题
- 访问ASP.NET页面时候出现权限问题的解决
- 解决ASP.NET中目录访问权限的问题
- 第6章_数组_加强循环(foreach)的使用
- 改造的HookYou的代码,但是出现access violation 错误,不知如何是好,着急
- c#当前应用程序路径(转)
- 2011/04/07学习笔记
- SetTextCharacterExtra用法
- 虚拟主机上asp.net运行权限不足问题及解决
- 眼过千遭不如手过一遍
- JavaScript中的new-面向对象实现原理
- Ext 核心 API -- Ext.apply 与 Ext.applyIf
- 【转】NT式驱动的基本结构
- 【转】MQ 与传统 CICS 应用的连接
- delphi 获取文件创建,修改时间
- 无线热点创建完成
- CXF拦截器(Interceptor)的使用