您的位置:首页 > 编程语言 > ASP

Asp.net 中Excel通过模板导出中发布问题

2011-10-08 11:09 351 查看
问题:
发生异常页: http://000.000.57.Z/Modules/EUoI/Reports/qsdwcpzhnh.aspx
异常信息: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a。
说明:
由于导出的Excel模板过于复杂,所以对于导出时采用了直接使用excel控件打开模板,然后填入数据,然后再将文件推送到客户端。
程序测试没有发现问题,但是发布成功之后,客户端却无法访问,这是怎么回事呢?

首先我们发现在通过vs调试时却没有问题,所以我们可以推论,程序代码是没有问题的,问题应该是出现在客户端访问服务器的环节。因此可能是权限问题。
在网上查询后发现方法比较一致,如下:
首先安装office2003,安装时注意添加对。net的支持
其次,添加引用到web.config,具体可以到c:\windows\assembly里面查看版本以及公钥标记。
<assemblies> <add assembly="Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/> </assemblies>
首先修改了一下存放excel文件的文件夹修改权限,然后在组件服务中(运行--dcomcnfg),找到 “Microsoft Excel应用程序”(在注册表里可以看到出问题的CLSID是指向这个组件的),在右键“属性”的“安全”标签中,修改“启动和激活权限”为“自定义”,“编辑”添加Iuser_MachineName --Internet来宾用户(这是由于<identity impersonate="true" />决定的),给与所有权限,“访问权限”的设置同上。然后在“标识”标签里选择“交互式用户”。

但是测试之后,问题并没有解决。

根据判断,我觉得应该还是权限设置不对,抱着尝试一下的心态,我把标识标签里选择了 下列用户,指定管理员,问题解决了。但是我不确定是否会存在其他潜在安全问题。

附网上的解决方案:

检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 具体解决方法如下:
1:在服务器上安装office的Excel软件.
2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应 用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加 一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限. 这样,我们便配置好了相应的Excel的DCOM权限.

注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户 由于EXCEL是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调 用这个功能的时候再删除以前在服务器上所生成的所有Excel

解决方法二:

如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:

在web.config中使用身份模拟,在<system.web>节中加入 <identity impersonate="true" userName="你的用户名" password="密码"/>

</system.web>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: