无法在 Web 服务器上创建 XLS 文件

Unable to create XLS file on web server

我们的 Web 服务器上有一个 WCF 应用程序。此应用程序中的一种服务方法创建了一个包含数据的 Excel XLS 文件,并将该文件放在一个目录中,以便用户稍后可以下载该文件。

我们的问题是,当此应用程序尝试创建 Excel 对象时,我们收到此错误:创建 Excel 帮助程序工作簿和应用程序时出错:检索 COM class CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件工厂 由于以下错误而失败:8000401a 服务器进程无法启动,因为配置的标识不正确。检查用户名和密码。

这是导致错误的行:

使用 EX = Microsoft.Office.Interop.Excel; EX.Application 应用程序 = 新 EX.Application(); //导致错误

我做了一些研究,我尝试进入 DCOMCNFG - 计算机 - 我的电脑 - DCOM 配置并右键单击 "Microsoft Excel previewer" - 属性 - 安全,然后添加几个组和用户以进行本地启动、本地激活等....

但这并没有帮助。有的文章说选择"Microsoft Excel Application"。但是,我在 DCOM 配置中只看到 "Microsoft Excel previewer"。

Excel已安装到此服务器上,但我们仍然遇到上述问题。

一件奇怪的事情是,如果我远程进入服务器,然后让我的 PC 上的客户端(浏览器)调用服务方法来创建 XLS,这没有问题。

我该怎么做才能解决这个问题?

您可以尝试通过将 IIS AppPool Identity 设置为具有交互式登录权限的用户来实现此目的。互操作程序集实际上通过在服务器上启动一个 Excel 实例然后与其通信以执行工作来工作。

话虽这么说,但这是一个糟糕的解决方案。您将面临的挑战如下:

  • 难以诊断和解决的 DCOM 权限问题(您现在 运行 遇到了这个问题)
  • Excel 进程在服务器上生成,并且有一半时间无法正确关闭,因此您的应用程序必须足够聪明,能够杀死错误的 Excel 进程,或者接受事实你的应用程序会疯狂地泄漏内存
  • Microsoft 不支持或不推荐它
  • Office 在设计时并未考虑服务器端安全因素

有关更多详细信息,请参阅以下内容:

https://support.microsoft.com/en-us/kb/257757