标题必定会将是普通客户对数码链接文件的访谈权限上,无法为以下连接检索外界数据

作者:必赢网站

用Excel Service做了一个报表,使用网站集管理员的身份时刷新完全正常,换了一个普通用户,总是提示刷新错误。检查了很久,因为能够正常的刷新,说明Excel Service 的有关的通用的配置应该没有问题,问题肯定是普通用户对数据链接文件的访问权限上,于是顺藤摸瓜,找到了数据连结库。当时处于安全的考虑,我删除了其他用户访问数据连结库的权限,我考虑正常情况普通用户不应该访问这个文档库。尝试添加测试用户的访问权限,经过多次的测试,我发现用户至少具备设计权限,才能够保证正常刷新数据连接。由此看来,如何正确的使用Excel Service,还是有不少的问题需要研究

典型错误提示如下:

§错误:

错误1无法为以下连接检索外部数据:
192.168.1.100 XXXXX XXX
数据源可能不可达、未响应或拒绝访问。
验证是否是在受信任文件位置启用了数据刷新,以及工作簿数据身份验证的设置是否正确。无法为以下连接检索外部数据:

*      检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。*

 

异常详细信息: ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。ASP.NET 有一个在应用程序没有模拟时使用的基进程标识(通常,在 IIS 5 上为 {MACHINE}ASPNET,在 IIS 6 上为网络服务)。如果应用程序正在通过 <identity impersonate="true"/> 模拟,则标识将为匿名用户(通常为 IUSR_MACHINENAME)或经过身份验证的请求用户。

首先请仔细阅读下面有关Excel Service的配置文档

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

 

检查任务

§分析:
      在Visual Studio环境中运行始终正常,但当项目部署到IIS后便会出现此错误。

  1. 是否在共享服务中配置了受信任文件位置
  2. 是否在共享服务中配置了受信任数据源连接库
  3. Excel中使用的odc是否已经保存到了数据源连接库中
  4. Excel中使用的odc是否是来至数据源连接库或UNC路径
  5. Excel中的连接属性是否已经选择了“始终使用连接文件”
  6. Excel中的验证设置是否已经设置成了“无”
  7. 当前用户是否有访问Excel文件所在文档库的访问权限
  8. 当前用户是否有访问Excel中使用的数据连接文件DCL所在的数据源

      异常详细信息中的“ASP.NET 未被授权访问所请求的资源,请考虑授予 ASP.NET 请求标识访问此资源的权限”基本上说明了报错的原因。

如果执行了上面的检查之后,仍然还是同样的错误,那就要检查下面的配置

      在Visual Studio环境中ASP.NET进程为WebDev.WebServer.exe,其具有访问Office COM组件的权限,故而正常。而在IIS的环境下,相应的ASP.NET进程(IIS5为ASPNET,IIS6为NetWork Service)不具有此访问权限。

  1. Excel Service配置项中配置的无人参与帐号,是否有权限访问数据源数据
  2. Excel Service的可信任数据提供程序是否已经配置正确(在使用SQL2008时经常会遇到这个问题)

 

在使用SQL 2008时,Excel Service访问SSAS数据时,在Excel中刷新数据时肯定会报错。你只要添加一个Provider就可以解决问题。

§解决办法:
     1、 开始—〉运行中输入dcomcnfg.exe,启动组件服务。
     2、 组件服务—〉计算机—〉我的电脑—〉DCOM配置,在其中找到Microsoft Excel Application,在其上右键—〉属性。
     3、 安全选项卡—〉启动和激活权限处选中“自定义”并编辑,添加NetWork Service用户,并为其赋予“本地启动”和“本地激活”权限。如下图:

Provider ID = MSOLAP.4
Data Provider Type = OLE DB
Description = Microsoft OLE DB Provider for OLAP Services 10.0.

图片 1

     4、 安全选项卡—〉访问权限处选中“自定义”并编辑,添加NetWork Service用户,并为其赋予“本地访问”权限。如下图:

 

图片 2

     5、 标识选项卡—〉选中“交互式用户”。

 

 

     该问题解决,但新的问题出现:

§错误:
*
      无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。*

 

§解决过程:
      程序中引用的Microsoft.Office.Interop.Excel版本为14,服务器端安装Office 2007。

      经网络查询,此问题源自服务端Office COM组件,建议修复Office或重新安装。

 

      @  修复Office 2007,问题依旧。
      @  重新安装Office 2007,问题依旧。

 

      继续搜寻解决问题的办法,有文章提到“Office 2007对应的Microsoft.Office.Interop.Excel版本为12,Office 2003对应的Microsoft.Office.Interop.Excel版本为11”。

 

      @  将程序引用的Microsoft.Office.Interop.Excel版本调整为12,但问题依旧。

 

      没有头绪,尝试一个不是办法的办法。

 

      @  卸载Office 2007,安装Office 2003,问题竟然解决。

 

§发现的问题:
      经测试,服务器端安装的Office版本与引用的Microsoft.Office.Interop.Excel版本之间并无直接的对应关系。当服务器端安装Office 2003时,无论引用的Microsoft.Office.Interop.Excel的版本是11、12还是14,运行均正常。当安装Office 2007,无论哪个版本均发生该错误。

 

§猜测性分析:
      Microsoft.Office.Interop.Excel 11、12对应的运行时为1.1,而Microsoft.Office.Interop.Excel 14对应的是2.0。这三个版本的dll均对应Office 2003提供的Office COM组件。

      而支持Office 2007 COM组件的引用则应为更高版本。

      以上分析均为猜测,并未经过测试检验或找到权威的说明。

 

本文由必赢体育发布,转载请注明来源

关键词: