asp.net导出excel时出错

来源:互联网 发布:免费数据api 编辑:程序博客网 时间:2024/05/16 15:54

asp.net后台处理包含了利用microsoft excel com组件导出excel文件的代码。在vs2010中调试时(使用vs自带webserver),能够正常导出。

但应用发布以后,在服务器的浏览器上或者远程客户端的浏览器上访问iis中的应用,导出时就出错了。下面贴出了浏览器上看到的错误提示:

“/testExportExcel”应用程序中的服务器错误。


检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。


说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 


异常详细信息: System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。 


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


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


源错误: 


执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。


堆栈跟踪: 




[UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。]
   _Default.Button1_Click(Object sender, EventArgs e) +39
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563


版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.1“



在 google上搜索该错误,发现google给出的各个解决方法几乎完全相同。都是说要设置asp.net程序用户对excel的com组件的访问权限。这也与上面的错误提示相印证了。

下面给出 了 网络上那些几乎相同的解决方案:

"

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败

作者:我不是高手  来源:博客园  发布时间:2011-03-15 16:59  阅读:81 次  原文链接   [收藏]  

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。

 

配置DCOM

具体配置方法如下:

1:在服务器上安装office的Excel软件.

2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"

3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框

5:点击"标识"标签,选择"交互式用户"

6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.

7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.

注:在XP系统中还要添"加机器名/ASPNET"用户的上述权限。
在window 2003 server中,如果还出现8000401a错误,在标示里面选择“下列用户”,填写登录计算机的并拥有对Excel本地操作权限的用户。或者在标示里面选择“启用用户”




"

该解决方案引用自这里 



但是我按照上面的方法做了以后,仍然提示相同的错误。

也就是把network service用户赋予访问 microsoft excel application的权限。对我来说这样不行。

我尝试把everyone赋予 microsoft excel application的权限,仍然不行。并且发现,everyone 似乎又在microsoft excel application的权限列表里消失了。

最后我又尝试把iis_iuser用户增加权限,之后再访问应用,导出成功了。


似乎不同的系统或者iis版本需要赋权限的用户也不同