7

我正在编写一个使用 .dotx 模板并在 aspx 页面中合并数据的程序。该程序在我的本地开发工作站上运行完美,但是当我将它部署到测试 IIS 服务器时,它在下面的第二行失败,给我一个对象引用错误。

我之前遇到了问题,因为 Word Com 对象不在 IIS 服务器上,所以我将 Word 加载到服务器上并在 DCom 中设置权限并解决了这个问题。但是现在我在以 wRange = ..... 开头的行上收到此错误

正如我所说,该程序在调试模式下可以在本地完美运行。

有任何想法吗?

Microsoft.Office.Interop.Word.DocumentClass

System.NullReferenceException: Object reference not set to an instance of an object

代码行:

Document BaseDocument = oWord.Documents.Open(ref oTemplate, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

wRange = BaseDocument.Bookmarks.get_Item(ref endOfDoc).Range;
4

4 回答 4

6
  1. 单击开始,单击程序,单击管理工具,单击组件服务。
  2. 展开 Component Services,展开 Computers,展开 My Computer,展开 DCOM Config,然后右键单击Microsoft Word 97 - 2003 Document。选择属性。
  3. 单击常规。将身份验证级别设置为连接(也没有工作)。
  4. 单击身份。设置此用户。指定将始终用于运行 COM 应用程序的用户帐户,无论哪个用户正在访问它。
  5. 单击按钮应用。
  6. 单击“确定”按钮。

有关“为远程访问配置DCOM”的更多信息,请访问为远程访问配置 DCOM

于 2015-09-29T19:49:01.877 回答
0

在目标机器上安装 Office 后,请确保您直接打开 Word 等应用程序之一,因为可能会有更多提示激活许可证。在您逐步完成此过程之前,API 将无法工作,并且生成的错误将无法明确问题的真正含义。

因此,NullReferenceException 可能是由 Word 无法打开文档引起的,因此 Word.Documents.Open() 将返回 null。老实说,我不是 100% 确定这是导致您的问题的原因 - 正如我所说,错误不会清楚地告诉您问题所在。(不久前我自己也遇到过这种情况,虽然我知道 API 抛出了异常,但我不记得它是否与您所看到的相同。)

于 2011-05-15T01:11:48.810 回答
0

如果服务器上确实安装了 word,请检查运行 IIS 的用户帐户是否对 Microsoft.Office.Interop 程序集具有实际权限

于 2011-02-25T17:14:14.677 回答
-3

您的程序在调试模式下无法在本地运行。您根本没有使用任何错误。

在任何情况下,您都不应该使用来自 ASP.NET 应用程序或任何其他服务器应用程序的任何 Office 自动化 API。这些 API 被设计为对交互式桌面应用程序的调用。他们做出的许多假设不适用于服务器应用程序。

例如,桌面应用程序通过用户操作成为 Windows 消息队列中的消息进行同步。ASP.NET 应用程序中没有 Windows 消息队列,因此对共享数据的访问是不同步的。您的测试可能根本不会导致多个线程同时运行。

对于给定 COM 组件的所有用户,可能存在仅存在于单个副本中的数据。这在桌面应用程序中运行良好,因为只有一个用户。您的 ASP.NET 应用程序有许多用户同时执行代码。违反了另一个假设。

所有这些事情都会产生实际上无法修复的细微错误。它们只能四处移动,让您认为您已经解决了问题,直到您意识到还有一个问题。这个循环永远不会结束,也永远不会结束,因为您不会解决实际问题:问题是您正在使用来自服务器应用程序的 Office 自动化 API。

解决问题,您将不再有此类错误。


PS 碰巧你可能违反了你的 Microsoft Word 许可证,除非你的 ASP.NET 应用程序的所有用户都拥有 Word 应用程序的许可证。

于 2011-02-25T19:48:00.987 回答