80070005当具有水晶报告的asp.net网站部署在专用服务器上时,访问被拒绝

suh*_*ail 5 asp.net hosting crystal-reports-2008

我有一个asp.net应用程序,它使用水晶报告显示报告.应用程序在我的本地PC上正常工作.我在我们的专用服务器上部署了这个应用程序,并在专用服务器上安装了水晶报告运行时引擎.当我尝试按报告以查看报告,我收到上述错误.我将文件夹"C:\ Windows\Temp"的权限更改为完全控制(通过选择"temp"文件夹的属性,所有用户的完全控制权限(IIS-users,network..etc)).我不确定这是否是给这个文件夹提供完全控制权限的正确方法(我对网络概念的了解不多).但是我仍然得到同样的错误.错误是:

检索具有CLSID {4DB2E2BB-78E6-4AEA-BEFB-FDAAB610FD1B}的组件的COM类工厂由于以下错误而失败:80070005访问被拒绝.(来自HRESULT的异常:0x80070005(E_ACCESSDENIED)).

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.UnauthorizedAccessException:检索具有CLSID {4DB2E2BB-78E6-4AEA-BEFB-FDAAB610FD1B}的组件的COM类工厂由于以下错误而失败:80070005访问被拒绝.(来自HRESULT的异常:0x80070005(E_ACCESSDENIED)).

ASP.NET无权访问所请求的资源.考虑将资源的访问权限授予ASP.NET请求标识.ASP.NET具有基本进程标识(IIS 5上通常为{MACHINE}\ASPNET,IIS 6和IIS 7上为网络服务,IIS 7.5上已配置的应用程序池标识),如果应用程序未模拟,则使用该标识.如果应用程序模拟通过,则标识将是匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户.

要授予对文件的ASP.NET访问权限,请在资源管理器中右键单击该文件,选择"属性",然后选择"安全"选项卡.单击"添加"以添加适当的用户或组.突出显示ASP.NET帐户,并选中所需访问的框.

Ror*_*ory 13

我在运行IIS6的客户端的Windows Server 2003计算机上遇到了同样的问题.与普通服务器相比,它们的服务器处于非常锁定状态,并且锁定中的某些内容可能是问题所在.我没有在许多其他客户端的服务器上遇到过这个问题.我还没有解决这个问题,但是到目前为止我已经学到了一些步骤......

首先要做的是仔细检查您的应用程序正在运行的应用程序池,然后检查应用程序池正在使用哪个标识(例如网络服务或应用程序池标识或...).这对于确保您向正确的用户授予权限非常重要.在你确定这一点之前不要再进一步了.

接下来检查你是否使用IIS模拟(除非你知道它是什么,否则你可能不会).这是应用程序池在用户身份下运行的类型...只有在您使用Windows身份验证并且在web.config中时才会出现这种情况<identity impersonate="true" />.如果您正在使用模拟,则可能必须为最终用户提供所有必需的文件和/或COM访问权限.如果不是(在我的情况下),只需检查权限是否适合您的应用程序池的用户或IIS用户组.

了解权限的正确标识后,请尝试以下步骤:

  • 如果是64位计算机,请检查是否已Enable 32-bit applications启用应用程序池(或者已安装64位运行时)
  • 检查应用程序池标识是否有权访问该C:\Windows\Temp文件夹(您已经提到过您已经完成此操作但我认为我会将其列为遇到此问题的其他人).
  • 检查应用程序池标识是否可以访问Crystal Reports文件夹,例如C:\Program Files\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\.您可以通过打开regedit.exe找到该文件夹​​并导航到HKEY_CLASSES_ROOT\CLSID\{4DB2E2BB-78E6-4AEA-BEFB-FDAAB610FD1B}\InProcServer32.从该注册表项的(默认)值获取路径,并检查该路径的父文件夹的权限.尝试将文件夹的完全控制权提供给正确的标识,以查看是否可以解决问题.
  • 我不确定这是否相关,但可能添加<startup useLegacyV2RuntimeActivationPolicy="true">到web.config可能会有所帮助...在这篇文章中建议有关具有类似问题的不同COM应用程序如此值得一去?所以你要在web.config中的标签内添加它:

    <startup useLegacyV2RuntimeActivationPolicy="true"> 
         <supportedRuntime version="v4.0"/> 
    </startup>
    
    Run Code Online (Sandbox Code Playgroud)
  • 检查服务器上的COM权限:

    • 从控制面板>管理工具打开组件服务
    • 展开组件服务>计算机>我的电脑,然后右键单击>属性
    • 单击"COM安全"选项卡
    • 在启动和激活权限中,单击编辑默认...按钮
    • 检查列出的启动和激活权限权限.如果未列出您的应用程序池用户,可以尝试添加所有4个允许权限并重新测试.如果这不能解决问题,则撤消任何更改.
  • 如果这些都没有解决它,那么我建议下载进程监视器并尝试确定它正在尝试做什么来命中拒绝访问.这是我解决问题的下一步,所以如果我发现任何问题,我会更新这个答案.

  • 这里有很好的诊断步骤,我的问题是该进程没有读取文件的权限 - Process Monitor帮助了. (2认同)