虚拟主机上asp.net运行权限不足问题及解决

asp.net|解决|问题|虚拟主机

   有些时候我们写的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="" />

    最近已经不研究aps.net了,因此也没有认真去查找深层的原因,或许我的认识还有误。希望那位高手可以道出深层的原因,或指正我的错误。

时间: 2024-11-03 13:53:09

虚拟主机上asp.net运行权限不足问题及解决的相关文章

perl-无法访问虚拟主机上的Perl程序

问题描述 无法访问虚拟主机上的Perl程序 我将本地写好Perl程序上传到虚拟主机上public_html目录,权限也设置了, 但是就是无法访问,提示: Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, webmaste

虚拟主机上用Asp.net实现Urlrewrite

在网上看到,很多朋友在ASP.NET中做urlrewrite,用的是HttpHandle+Server.Transfer的方法.其实这种方法是错误的.第一,HttpHandle是实现不了urlrewrite的:第二Server.Transfer是标准的重定向,根本不是urlrewrite. 其实,实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码就可以轻松实现. 我这里介绍的是在虚拟主机上,虚拟主机不同于自己的服务器,你是没有权限去修改IIS,也

在虚拟主机上用asp.net轻松实现urlrewrite

asp.net|虚拟主机    在网上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle+Server.Transfer的方法.其实这种方法是错误的.第一,HttpHandle是实现不了urlrewrite的:第二Server.Transfer是标准的重定向,根本不是urlrewrite.     其实,实现urlrewrite不用自己HttpHandle,也不用自己实现HttpModule,用几行代码就可以轻松实现.     我这里介绍的是在虚拟主机上,虚拟主机

asp.net应用程序如何发布到国外免费的支持asp.net的虚拟主机上?

问题描述 各位好!小弟刚学asp.net,前几天申请了一个国外提供的支持asp.net的虚拟主机(给了我FTP地址),请问如何才能将我生成的asp.net程序发布到这个虚拟主机上.对了,还要告诉大家,登陆这个网站后,可以通过这个网站的主页来设置我的虚拟空间的目录,将我开发的项目按照项目目录直接COPY过去能行吗?还有一个问题想请教各位大哥,小弟想通过自家的对等网(两台电脑通过宽带路由器相连并接入INTERNET.一台运行windows2000server,另一台运行windowsXPprofes

服务器-一个关于学习的android客户端上面加入讨论功能。想部署到虚拟主机上。

问题描述 一个关于学习的android客户端上面加入讨论功能.想部署到虚拟主机上. 但是不知道后台服务器后与数据库之间怎么编写.大家有没类似的demo..现在不会ssh和php.如果有合适的方法.十分乐意愿意花时间学习.![![![![ 解决方案 你把程序写好,当然可以部署了,只是你至少要会PHP或者jsp,不然你怎么写后台?淘宝买的虚拟主机估计限制很大,这个要看你自己的需求了. 解决方案二: 用web service做后端,前端做一个界面就可以了. 解决方案三: 这个问题比较复杂,上百度查

FTP使用手册:怎么将文件上传到阿里云虚拟主机上?

注意,请先到阿里云官网领取幸运券,除了价格上有很多优惠外,还可以参与抽奖.详见:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=2a7uv47d&utm_source=2a7uv47d 1.你可以从网上下载个FTP软件,本文以FLASHFXP这个FTP软件为例进行了介绍,各FTP软件其实是大同小异的,都差不多. 2.程序运行后,按下图点击:Site Manager. 3.然后,点击:New Si

虚拟主机上,hibernate的连接池如何配置

问题描述 有这方面经验的,希望能指导一下,最好能给出C3PO的配置,或者proxool的配置,如果能解决,分数全部奉上,谢谢:下面的配置不行,而且修改了几个类似参数也不行,最好能说明原因<!-- 最大连接数 --><property name="hibernate.c3p0.max_size">20</property><!-- 最小连接数 --><property name="hibernate.c3p0.min_siz

IIS无法运行asp的NTFS权限设置图文教程_win服务器

因为现在在家里有点空,下面就详细写一下在Windows XP简体专业版下设置IIS的权限(如果网站所在的分区不是NTFS文件系统就不用设置权限,在分区的属性里可以查看是什么文件系统),对于Windows 2000/2003同样适用.以C:\wwwroot文件夹演示. 右键点击wwwroot目录,选择"属性",可能会出现下图所示情况,没有"安全"标签. 如果没有"安全"标签,请先进行"文件夹选项"设置,如果有了则跳过.1.&qu

ASP的运行环境和虚拟目录的设置

虚拟目录 要想让编好的ASP代码运行起来,你必须配置它的运行环境: 建议用Windows NT4.0+IIS4.0或更高的Windows 2K+IIS5.0 来运行和调试你的ASP程序. 关于虚拟目录的一点说明: 许多人一般都将ASP代码放到\InetPub\wwwroot文件夹下, 在\InetPub\wwwroot文件夹有许多文件,如果把你的代码放在 这里会变很乱,而且如果删掉了这里的一些文件可能使你的ASP运行环境 出错,建议在别的分区上建一个虚拟目录,然后把你要编的所有ASP文件 放到这