【问题标题】:Code runs on development server but not on IIS代码在开发服务器上运行,但不在 IIS 上
【发布时间】:2015-08-26 15:53:53
【问题描述】:

我有一个 Web 应用程序,用户在其中运行查询(通过 Web 界面)并以 excel 格式获取输出。有时,此输出包含超过 300k 条记录。用户需要这些数据进行进一步研究。

现在为了加快创建如此大数据量的动态 Excel,我们使用“Microsoft.Office.Interop.Excel”COM 对象。

我们的代码在内置的 asp.net 开发服务器上运行良好。但是,当托管在 IIS 上时,它会给我们“拒绝访问”错误(具体错误如下所示)。

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

我已将所有权限授予 IIS 用户,但仍然无法正常工作。 我已经尝试过 Windows Server 2012 R2 和 Windows 7 操作系统,但它们都不能正常工作。

我已对“DCOMCNFG”进行了更改,并在“COM 安全”选项卡下授予网络用户访问权限。

我可以采取哪些其他步骤来完成这项工作?

【问题讨论】:

  • 会不会和文件系统文件夹的权限有关?
  • 我已授予此项目所在的整个文件夹的完全写入权限。
  • 您是否将 IIS 中的应用程序池用户包含在该权限列表中?
  • @Dryadwoods,是的,我有。此外,我还将应用程序池标识修改为“本地系统”。

标签: c# asp.net excel iis iis-7.5


【解决方案1】:
【解决方案2】:

这是一个 COM 权限问题。

Start > Run > dcomcnfg

导航到Component Services > Computers > My Computer > DCOM Config

找到Microsoft Excel Application

Right click > Properties

在安全选项卡上:选择启动下的SecurityActivation Permissions,然后单击Edit…

添加运行站点的帐户(例如:网络服务)并分配本地启动和本地激活权限

Source

还应启用 ASP.NET 身份验证。

【讨论】:

  • 按照这个确切的步骤添加了网络服务以及 /user 权限。由于未知原因,它仍然无法正常工作。
  • 您的网站在哪个用户下运行?
  • 我已通过显式添加用户名和密码为网站提供“管理员”权限。
  • 哪个用户(帐户)? (您可以在应用程序池中找到他)
  • 我已经尝试过“特定用户”和“应用程序用户”
【解决方案3】:

我认为要使其正常工作,必须在服务器上安装 Office。 因此,如果不是这种情况,请在服务器上安装 Office。 (替代方法是使用 OpenXml http://www.microsoft.com/en-us/download/details.aspx?id=30425

【讨论】:

    【解决方案4】:

    我决定放弃在服务器上使用 COM 对象进行 Excel 操作。相反,我决定使用EPPlus open office XML SDK 来生成 Excel 文件。这在服务器上不需要任何额外的安全权限即可工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2019-11-05
      相关资源
      最近更新 更多