80070005 访问被拒绝,当带有水晶报表的asp.net网站部署在专用服务器上时
Posted
技术标签:
【中文标题】80070005 访问被拒绝,当带有水晶报表的asp.net网站部署在专用服务器上时【英文标题】:80070005 Access is denied,when asp.net website with crystal report is deployed on dedicated server 【发布时间】:2012-12-10 18:15:53 【问题描述】:我有一个 asp.net 应用程序,它使用水晶报表显示报表。该应用程序在我的本地 PC 上正常工作。我在我们的专用服务器上部署了这个应用程序,还在专用服务器上安装了水晶报表运行时引擎。当我尝试按报告以查看报告,我收到上述错误。我将文件夹“C:\Windows\Temp”的权限更改为完全控制(通过选择“临时”文件夹的属性,完全控制权限对于所有用户(IIS用户,网络..等))。我不确定这是否是授予该文件夹完全控制权限的正确方法(我不太了解网络概念)。但我仍然得到同样的错误。错误是:
检索具有 CLSID 的组件的 COM 类工厂 4DB2E2BB-78E6-4AEA-BEFB-FDAAB610FD1B 由于以下原因而失败 错误:80070005 访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.UnauthorizedAccessException:正在检索 具有 CLSID 的组件的 COM 类工厂 4DB2E2BB-78E6-4AEA-BEFB-FDAAB610FD1B 由于以下原因而失败 错误:80070005 访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。
ASP.NET 无权访问请求的资源。考虑 向 ASP.NET 请求授予对资源的访问权限 身份。 ASP.NET 有一个基本进程标识(通常 IIS 5 上的 MACHINE\ASPNET 或 IIS 6 和 IIS 7 上的网络服务,以及 IIS 7.5 上配置的应用程序池标识),如果 该应用程序不是模拟的。如果应用程序是 冒充 via ,身份将是 匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的用户 请求用户。
要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件, 选择“属性”并选择“安全”选项卡。点击“添加”添加 适当的用户或组。突出显示 ASP.NET 帐户,然后 选中所需访问权限的复选框。
【问题讨论】:
出于兴趣,服务器运行的是哪个版本的 Windows 和 IIS,它是 64 位的吗? 【参考方案1】:我刚刚将我的网站移到了默认应用程序池中,并且它工作正常。 我将 32 位应用程序配置为启用并标识到 NetworkService。
【讨论】:
【参考方案2】:我在客户端的运行 IIS6 的 Windows Server 2003 机器上遇到了同样的问题。与普通服务器相比,他们的服务器非常锁定,锁定中的某些东西可能是问题所在。我在其他几十个客户的服务器上都没有遇到过这个问题。我还没有解决这个问题,但这里是我迄今为止学到的一些步骤......
首先要做的是仔细检查您的应用在哪个应用程序池下运行,然后检查应用程序池正在使用哪个标识(例如网络服务或应用程序池标识或...)。这对于确保您向正确的用户授予权限非常重要。在您确定这一点之前,不要再进一步。
接下来检查您是否使用IIS Impersonation(除非您知道它是什么,否则您可能不会使用)。这是应用程序池在用户身份下运行的地方......只有在您使用 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 可能会有所帮助...this post 中建议与具有类似问题的不同 COM 应用程序相关,因此值得一试吗?所以你可以在 web.config 的标签中添加这个:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
检查服务器上的 COM 权限:
从“控制面板”>“管理工具”打开组件服务 展开组件服务>计算机>我的电脑,然后右键单击>属性 单击 COM 安全选项卡 在启动和激活权限中单击编辑默认...按钮 检查列出的启动和激活权限。如果您的应用程序池用户未列出,可以尝试添加所有 4 允许权限并重新测试。如果这不能解决问题,请撤消任何更改。 如果这些都没有解决它,那么我建议下载Process Monitor 并尝试确定它正在尝试执行的操作会导致访问被拒绝。这是我在这个问题上的下一步,所以如果我发现任何东西,我会更新这个答案。【讨论】:
我在 64 位服务器上遇到了同样的问题。对于应用程序池,即使我安装了 64 位运行时,我也必须启用 32 位。 这里有很好的诊断步骤,我的问题是进程没有读取文件的权限 - 进程监视器有帮助。以上是关于80070005 访问被拒绝,当带有水晶报表的asp.net网站部署在专用服务器上时的主要内容,如果未能解决你的问题,请参考以下文章
跨域调用错误:XMLHttpRequest:网络错误 0x80070005,访问被拒绝
org.jinterop.dcom.common.JIException:访问被拒绝。 [0x80070005]
尝试使用 SWbemLocator 从远程计算机检索 WMI 时访问被拒绝 (80070005)
通过 asp.net 访问 Office Word 对象模型导致“由于以下错误而失败:80070005 访问被拒绝”。
Register-ScheduledTask:访问被拒绝。 (HRESULT 0x80070005)
安装CARLA Simulator错误 安装失败 0x80070005 - 访问被拒绝 Error Setup Failed 0x80070005 - Access is denied