发布asp.net应用程序后,其中导入、导出excel报错的解决方案

消息: Sys.WebForms.PageRequestManagerServerErrorException: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 拒绝访问。 (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

在asp.net程序中用到了导入、导出excel 在调试的时候没有问题,能够正常导入。但在发布到IIS后出现以上错误。折磨的朕好是辛苦,有网友提出了如下解决办法:


第一种:(可以实现)

在服务器上点击开始—运行—输入:Dcomcnfg然后回车,系统将弹出分布式COM配置属性窗体。

在“应用程序”页里面选择“Microsoft Excel 应用程序”。点击“属性”按钮,系统将弹出该应用程序的属性窗体。

在“常规”页中的身份验证级别下拉列表中选择“无”。

在“安全性”页中选中“使用自定义访问权限”和“使用自定义启动权限”,然后分别点击访问用户和启动用户对应的“编辑”按钮,在里面添加用户“everyone”。

最后在“身份标示”页里面选中“交互式用户”。

第二种:(可以实现)

在web.config中<system.web>中加入如下配置

<identity impersonate="true" userName="[计算机登录用户名]" password="[密码]"/>

这个方法朕不推荐,原因如下:

如果登陆用户的密码改变将会报错,而且将登陆密码写在web.config中也是不安全的。

朕的实现方法:

上面两种皆可实现但我还是要说说我的看法:

首先说说为什么会出现这样的错误?

是因为我们访问站点的时候是属于"NETWORK SERVICE"这个用户组访问的,不信可以到“任务管理器”-“进程”中看(w3wp.exe这个进程的用户名)。

w3wp.exe——是在IIS(因特网信息服务器)与应用程序池相关联的一个进程,如果你有多个应用程序池,就会有对应的多个w3wp.exe的进程实例运行。

这个进程用来分配大量的系统资源。这个进程对于系统的稳定和安全具有重要的意义,不能轻易的结束掉这个进程。

w3wp.exe——的启动用户是系统内置安全帐户network service。

w3wp.exe——的正常路径是%windir%\system32\inetsrv,一般在C:\WINDOWS\system32\inetsrv

废话我就不多说了,由于这个“NETWORK SERVICE”这个用户组没有启动和激活、访问Excel的权限所以出现这个错误。既然知道了原因就好办了。

解决方法如下:

和上面第一种方法差不多,唯独的差别就是加入的不是EVERYONE用户组而是NETWORK SERVICE用户组。

不用修改在“常规”页中的身份验证级别下拉列表中的选择 ,“默认”就可以了。注意:在“身份标示”页里面选中“交互式用户”,否则有可能出现错误。

 

posted @ 2011-08-26 01:35  凡心不凡  阅读(4716)  评论(0编辑  收藏  举报