写的网站需要一个功能是:上传excel文件,然后解析excel文件,并将excel文件中的内容通过sqlbulkcopy功能导入到数据库中。通过使用ajax技术,我们不仅实现了功能,而且界面也美化的不错。
但是由于测试都是在vs自带的iis服务器,所以我们的测试最初也都是在这个自带的iis服务器上进行。而这期间vs没有报任何错误,也就是说,开发阶段这功能是没有问题的,但是当我们部署在服务器上之后,它就不正常了,报的错误是检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,报错误80070005
这肯定不是代码的问题,因为如果是代码问题,那么在调试阶段这个功能也不会正常,所以我觉得应该是权限配置的问题。
通过我们查找相关资料,通过如下步骤解决了这个问题:
2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"MicrosoftExcel 应用程序属性"对话框
5:点击"标识"标签,选择"交互式用户"
6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORKSERVICE"用户 ,并给它赋予"本地启动"和"本地激活"权限.
7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORKSERVICE"用户,然后赋予"本地访问"权限.
通过上面的步骤,我们可以配置好Excel的DCOM权限。(如果上述行不通,则编辑“我的电脑”的默认权限,具体可以上网查询)
DCOM权限配置好之后,如果直接重启iis并且访问,则有可能出现文件无法访问或者文件路径不正确等异常。这是因为没有为DCOM组件添加IUSR用户权限和EVERYONE用户权限。只需要把这两个用户名添加至DCOM中并且设定可访问即可。
然后,我们重启iis服务器,并且重新生成项目,但是OleDbconnection又报了错误。这时只需要把应用程序池中的“启用32位应用程序”设置为 true就可以正常运行了。