ASP.Net在托管时生成Excel的Com-InterOp问题

16
在我的ASP.Net应用程序中,我使用MsExcel Object Libby(Com-InterOp)生成Excel文件。该应用程序在VS dev.环境中运行良好。
但是,当我将其托管到服务器上时,如果没有用户通过远程桌面连接登录到服务器,则会出现以下错误:
“检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因是以下错误:8000401a由于配置的标识不正确而无法启动服务器进程。请检查用户名和密码。(来自HRESULT的异常:0x8000401A)。”
我已经设置了DCOM配置。奇怪的是,至少一个用户应该通过RDC连接到服务器。如果是这样,每个人都可以生成EXCEL。否则,就会出现上述错误。应用程序的其他功能工作正常。
服务器是Windows Server 2008,IIS7。用户通过VPN连接应用程序。 有人遇到过这样的问题吗?
提前致谢。

2
在DCOMCONFIG中,启动/执行部分设置了哪个用户?请验证凭据是否正确。 - Shai
如果不会造成伤害,可以像@shai建议的那样进行检查,或者在web.config文件中模拟网站用户为Windows管理员用户。 - Devjosh
@Shai:我已经在“启动和激活权限”部分为以下用户设置了所有权限。Interactive、IIS_Isurs、Administrators、Network Service、System、Everyone。 - Thanushka
9个回答

18
最后,我创建了一个在计算机上具有Web服务管理员权限的用户,并按照下面屏幕上显示的方式设置了该用户:

enter image description here

太好了,我们不需要让计算机被锁定。


2
如果我们选择“启动用户”选项,那么它就会解决。 - Prince Antony G

6
问题在于应用程序的“身份”设置缺乏足够的权限。这可能有几个原因,但在我们进入这些原因之前,请先查看身份配置在哪里。打开控制面板、管理工具,双击组件服务。展开COM+应用程序,在要查询的应用程序上单击鼠标右键,点击属性,然后切换到身份选项卡。
可能的一个原因是,在设置应用程序的身份时,您仅选择了一个无权访问DLL或DLL接触的文件或系统调用的用户。
如果此身份设置为“交互式用户”,则当当前登录到计算机的用户是低级别用户或根本没有用户登录时,上述错误可能会发生。这就是为什么在开发过程中永远不会检测到此错误的主要原因... 开发COM+应用程序的用户完全控制该计算机并作为交互式用户登录和运行。
如果您的DLL需要使用具有足够权限的本地用户帐户,则应确保使用此类用户帐户。使用VPN的用户可能会遇到困难。

3

微软不建议或支持在类似ASP.NET这样的服务器环境中使用Excel应用程序的服务器端自动化,请参见此处。最好使用Excel package plus(xslx)或Excel library(xls)。


3

只需将Identity设置为此用户,然后输入具有足够权限的用户的用户名和密码。在我的情况下,我输入了一个强制使用者组的用户。


2
在服务器上使用Office Interop是不被微软支持的 - 请参见http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2 自Windows Vista以来,微软引入了几个与安全有关的措施,防止Windows服务(IIS只是其中的一个特例)执行“桌面式”操作...这意味着你需要规避几个安全措施(仅靠模拟用户权限是不够的!)才能使其正常工作(不推荐这样做!)。
请注意,集成的VS Web服务器并不模拟IIS关于权限等方面的行为。
在服务器场景中处理Excel有几个选择(免费和商业):
我可以推荐Aspose.CellsFlexcel...没有尝试SpreadsheetGear,但听说很多好事情。
免费选项(但仅适用于xlsx格式!)例如来自微软的OpenXML 2EPPlus

Excel在服务器上得到支持时,还需要使用HPC for Excel... 请参阅http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=2610 - Glen Little
如果您仔细研究一下 Excel 的 HPC,您会发现它并没有提供一个可以完成所有 Interop 可能操作的 API... 因此,是否可以使用它必须根据确切的需求进行仔细考虑。@GlenLittle - Yahia
是的,HPC提供了一个简单的包装器,但你可以很安全地使用整个API! - Glen Little
这并不是一个有用的回答。许多公司都在运行Office Interop的现有软件中找到了解决方法。我们不能仅仅重写所有东西。 - badbod99

1

我曾经遇到过这个问题,进行了研究。

我做了以下操作:http://forums.asp.net/t/1093228.aspx

我不知道这是一个多好的解决方案,但它有效。:)

在cmd中键入dcomcnfg

进入组件服务-我的电脑->组件服务->COM安全性->启动和激活权限->编辑默认->添加...

现在添加网络服务并允许它的所有权限。


好的,我改变了我的答案。抱歉 :) - user833102

0

我在尝试读取上传的Excel文件时遇到了相同的情况。

  1. 创建一个本地帐户(设置密码并勾选永不过期)
  2. 将步骤1中创建的帐户添加到IIS_IUSRS组中
  3. 修改您的Web配置
    ...
  4. 注销服务器并尝试。

希望对您有所帮助。


0

只需使用管理员权限在计算机上创建一个新用户,并根据下面的图像将此用户分配到COM服务Identity Tab上。它可以完美地工作。

screenshot


-1

感谢@Rofans.Net的贡献,基于他提供的信息,我们发现应用程序所在的服务器位于第三方数据中心,并且没有用户一直登录到该服务器。只有远程桌面连接(RDC)的用户才能登录。

因此,我们设法让一个用户始终保持登录状态,并将计算机锁定,以便始终有一个已登录的用户。

这是我们找到的唯一方法,如果有人发现更好的方法,请添加。

谢谢。


1
很遗憾,这是我在处理类似COM组件问题时找到的最佳解决方案。 - EricRRichards

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接