我有一个asp.net应用程序,它使用水晶报告显示报告。应用程序在我的本地PC上正常工作。我在我们的专用服务器上部署了这个应用程序,并在专用服务器上安装了水晶报告运行时引擎。我尝试按报告以查看报告,我收到上述错误。我将文件夹“C:\ Windows \ Temp”的权限更改为完全控制(通过选择“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上配置的应用程序池标识,如果使用的话 该申请不是冒充。如果申请是 冒充通过,身份将是 匿名用户(通常是IUSR_MACHINENAME)或经过身份验证的用户 请求用户。
要授予对文件的ASP.NET访问权限,请在资源管理器中右键单击该文件, 选择“属性”,然后选择“安全”选项卡。单击“添加”进行添加 适当的用户或组。突出显示ASP.NET帐户,和 选中所需访问的框。
答案 0 :(得分:12)
我在运行IIS6的客户端的Windows Server 2003计算机上遇到同样的问题。与普通服务器相比,它们的服务器处于非常锁定状态,并且锁定中的某些内容可能是问题所在。我没有在许多其他客户端的服务器上遇到过这个问题。我还没有解决问题,但是到目前为止我已经学到了一些步骤......
要做的第一件事是仔细检查您的应用正在运行哪个应用程序池,然后检查应用程序池正在使用哪个标识(例如网络服务或应用程序池标识或...)。这对于确保您向正确的用户授予权限非常重要。在你确定这一点之前不要再进一步了。
接下来检查你是否正在使用IIS Impersonation(除非你知道它是什么,否则你可能不会这样做)。这是应用程序池在用户身份下运行的类型...只有在您使用Windows身份验证时才会出现这种情况,而在web.config中只有<identity impersonate="true" />
。如果您正在使用模拟,那么可能您必须为最终用户提供所有必要的文件和/或COM访问权限。如果不是(在我的情况下),只需检查权限是否适合您的应用程序池的用户或IIS用户组。
知道权限的正确标识后,请尝试以下步骤:
Enable 32-bit applications
(或者您安装了64位运行时)C:\Windows\Temp
文件夹(您已经提到过您已完成此操作,但我认为我会将其列为遇到此问题的其他人)。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权限:
答案 1 :(得分:0)
我刚将我的网站移动到默认的应用程序池并且已经完成了工作。 我将32位应用程序配置为启用和压缩NetworkService。