在 ASP.NET 部署上创建 App_Data 并注册 Excel 应用程序?(IIS7.5)

在 ASP.NET 部署上创建 App_Data 并注册 Excel 应用程序?(IIS7.5)

我正在 IIS7 中部署 ASP.NET MVC3 应用程序。我已经部署了其他应用程序,但它们从未使用过 App_Data 文件夹或任何其他组件(例如 Interop 库)。

我使用了一键部署并使用了默认应用程序池。当我启动应用程序时,我立即收到一条错误消息:

[网络访问]很抱歉,在执行您的要求时发生了一个错误。

[从 IIS7 浏览]找不到路径“D:\Data\Apps\OppUpdate\App_Data\Test.xlsx”的一部分。

然后,我手动将 App_Data 文件夹添加到部署目录中,应用程序正常启动。然后,当涉及到使用 Interop 库的任务时,我收到以下错误:

[网络访问]很抱歉,在执行您的要求时发生了一个错误。

[从 IIS7 浏览]检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80040154 类未注册 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。

有没有办法在使用一键部署时自动添加 App_Data 文件夹?如何注册 Interop 服务?

感谢您,

弗朗西斯科

答案1

显然,问题与 Server 2008 有关。在服务器端执行的 Excel 应用程序会触发安全弹出窗口,该窗口现在存在于 MS OS(例如 Win 7 和 Vista)中。每次用户运行应用程序时,都会出现此对话框,警告他们不受信任的应用程序可能对其 PC 造成损害。显然,当应用程序(在本例中为 Excel)由另一个应用程序(在本例中为 Web 应用程序)运行时,对话框不会弹出,服务器也无法获得运行 Excel 的授权。

针对 Microsoft IIS 和 Excel 中这个令人震惊的 BUG 的解决方案非常棒:

创建目录“C:\Windows\SysWOW64\config\systemprofile\Desktop”为目录桌面设置完全控制权限(例如在 Win7 & IIS 7 & DefaultAppPool 中为用户“IIS AppPool\DefaultAppPool”设置权限)

来源:http://forums.iis.net/t/1148371.aspx

答案2

您不应该在多线程环境(如 Web 应用程序)中使用 COM Office 互操作。

尝试使用可以读取和写入 Excel 文件的库。(适用于 .xlsx)
http://epplus.codeplex.com/

或 Excellibrary (适用于 .XLS) http://code.google.com/p/excellibrary/
请注意,ExcelLibrary(不是 epplus)有一个错误,会导致单元格少于 50 个的工作表无法工作(4096 字节缓冲区错误)。NPOI

写入 XLS 文件时没有错误,但由于它是一个 java 端口,因此使用它读取 .xls 文件不太方便(ExcelLibrary 读取没有错误)。
http://npoi.codeplex.com

相关内容