【问题标题】:ASP.Net Com-InterOp Excel Generation issue when hosting托管时的 ASP.Net Com-InterOp Excel 生成问题
【发布时间】:2012-02-24 03:00:17
【问题描述】:

在我的 ASP.Net 应用程序中,我使用 MsExcel Object Libby (Com-InterOp) 生成一个 Excel 文件。该应用程序在 VS 开发中运行良好。环境。

但是当我在服务器中托管它时,如果我没有用户通过远程桌面连接登录到服务器,则会出现以下错误。

“检索 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:8000401a 由于配置的标识不正确,服务器进程无法启动。请检查用户名和密码。(来自 HRESULT 的异常:0x8000401A)。”

我也设置了 DCOM 配置。奇怪的是,至少应该有一个用户通过 RDC 连接到服务器。如果是这样,每个人都可以产生excel。如果不高于错误抛出。应用程序的其余功能工作正常。

服务器是 Windows Server 2008,IIS7。以及通过 VPN 连接应用程序的用户。

有人遇到过这样的问题吗?

提前致谢。

【问题讨论】:

  • 在 DCOMCONFIG 中,在 Launching/executing 部分中设置了哪个用户?验证凭据是否正确
  • 按照@shai 的建议进行检查,或者在 web.config 文件中将网站用户冒充为 Windows 管理员用户(如果没有伤害)
  • @Shai : 我已经在启动和激活权限部分设置了以下用户的所有权限。Interactive,IIS_Isurs,Administrators,Network Service,System,Everyone。

标签: c# asp.net windows-server-2008 com-interop


【解决方案1】:

Microsoft 不推荐或不支持在 ASP.NET 等服务器环境中对 Excel 应用程序进行服务器端自动化,请参阅 here 。最好使用Excel package plus (xslx) 或Excel library (xls)

【讨论】:

    【解决方案2】:

    问题是为应用程序设置的“身份”缺乏足够的权限。这可能有几个原因,但在我们进入这些之前,让我们看看这个身份是在哪里配置的。打开控制面板、管理工具,然后双击组件服务。展开 COM+ Applications,右键单击有问题的应用程序,点击 Properties,然后切换到 Identity 选项卡。

    一个可能的原因是,在为您的应用程序设置标识时,您只是选择了一个无权访问 DLL 或访问 DLL 所涉及的文件或系统调用的用户。

    如果此身份设置为“交互式用户”,则当当前登录机器的用户是 peon 或根本没有人登录时,可能会出现上述错误。这是在开发中从未检测到此错误的主要原因……开发 COM+ 应用程序并完全控制机器的用户也是作为交互式用户登录并运行的用户。

    如果您的 DLL 需要,您应该确保使用具有足够权限的本地用户帐户。使用 VPN 的用户可能会因此而感到困难。

    【讨论】:

      【解决方案3】:

      MS 不支持在服务器上使用 Office 互操作 - 请参阅 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2

      由于 Windows Vista MS 引入了一些与安全相关的措施,这些措施可以防止 Windows 服务(IIS 只是其中的一个特例)执行“类似桌面”的事情......这意味着您必须绕过几个安全措施(仅靠模仿是无法做到的!)让它发挥作用(不推荐!)。

      请注意,集成 VS Web 服务器不会模拟 IIS 在权限等方面的行为。

      要在服务器方案中处理 Excel,有几种选择(免费和商业):

      我可以推荐Aspose.CellsFlexcel...没有尝试SpreadsheetGear,但听到+阅读了很多关于它的好东西。

      免费选项(尽管仅适用于 xlsx 格式!)例如 OpenXML 2 from MSEPPlus

      【讨论】:

      • 当还使用 HPC for Excel 时,服务器上支持 Excel...请参阅 microsoft.com/en-us/download/…
      • @GlenLittle 如果您仔细检查 Excel 的 HPC,您会发现它没有提供可以通过 Interop 完成所有可能的 API ...因此必须仔细检查它是否是一个选项视具体需求而定
      • 是的,HPC 提供了一个简单的包装器,但是您可以轻松安全地使用整个 API!
      • 不是一个有用的答案。许多公司都有运行 Office Interop 的现有软件,许多公司已经找到了使这项工作的方法。我们不能都重写一切。
      【解决方案4】:

      感谢@Rofans.Net,根据他提供的观点,我们确定托管应用程序的服务器位于第 3 方数据中心,并且始终没有用户登录到服务器。只有登录的用户是 RDC 用户。

      所以我们设法让用户以各种方式登录,并将计算机置于锁定状态,以便它以各种方式拥有登录用户。

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

      谢谢。

      【讨论】:

      • 遗憾的是,这是我为 COM 组件的类似问题管理过的最佳解决方案。
      【解决方案5】:

      只需将此用户设置为Identity,并输入具有足够权限的用户的用户名和密码。就我而言,我输入了高级用户组的用户。

      【讨论】:

        【解决方案6】:

        我对这个问题进行了研究,我也有。 我做到了:http://forums.asp.net/t/1093228.aspx

        我不知道它的解决方案有多好,但它确实有效。 :)

        在 cmd 中输入 dcomcnfg

        转到组件服务->我的电脑->Com 安全->Lauch 和 激活权限 -> 编辑默认值 -> 添加...

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

        【讨论】:

        • 好的。我改变了答案。对不起:)
        【解决方案7】:

        最后我在使用网络服务的计算机上创建了管理员用户,然后我设置了这个用户 如下图所示:

        那行得通。而且我们不必让计算机被锁定。

        【讨论】:

        • 如果我们选择启动用户选项,那么它会解决。
        【解决方案8】:

        我在尝试读取上传的 Excel 文件时遇到了同样的情况。 让我们试试这些步骤。它对我有用。

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

        希望对你有帮助。

        【讨论】:

          【解决方案9】:

          只需在具有管理员权限的机器上创建一个新用户,然后按照下图在COM serviceIdentity Tab 上分配此用户。效果很好。

          【讨论】:

            猜你喜欢
            • 2012-09-14
            • 1970-01-01
            • 2010-11-10
            • 2012-08-15
            • 2017-04-20
            • 1970-01-01
            • 2021-10-10
            • 1970-01-01
            • 2012-03-30
            相关资源
            最近更新 更多