文章编号: 257757 - 最后修改: 2006年9月19日 - 修订: 12.6 服务器端 Office 自动化注意事项本页概要 开发人员可以使用“Microsoft Office 自动化”来构建利用 Office 产品内置的功能和特性的自定义解决方案。虽然这样的编程开发可以在客户端系统上相对容易地实现,可是,如果要通过服务器端代码(例如,Active Server Pages (ASP)、DCOM 或 NT Service)进行“自动化”,就会发生许多复杂情况。 本文讨论开发人员可能会面对的这些复杂情况,提供可以提高性能的“自动化”备选方案,并提出在必须要进行服务器端“自动化”的情况下配置 Office 的方法。不过,开发人员应该知道,下面提供的建议仅供参考。Microsoft 建议不要进行服务器端“Office 自动化”,也不为此提供支持。 注意:在此上下文中,“服务器端”一词也适用于在 Microsoft Windows NT 或 Microsoft Windows 2000 工作站上运行的代码,前提是该代码从所登录用户的交互式站以外的 WinStation 运行。例如,由 SYSTEM 帐户下的“任务计划程序”启动的代码运行的环境与“服务器端”ASP 或 DCOM 代码运行的环境是相同的,因此会遇到许多相同的问题。有关 WinStations 和 COM 的更多信息,请参见“更多信息”和“参考”这两部分。 更多信息 Microsoft Office 所有当前版本的设计、测试和配置都是为在客户端工作站上作为最终用户产品运行而完成的。它们假定存在一个交互式桌面和用户配置文件,而且不提供满足为以无人参与方式运行而设计的服务器端组件的需要所必需的重入或安全性级别。 Microsoft 目前建议不要从任何无人参与的、非交互式客户端应用程序或组件(包括 ASP、DCOM 和 NT Service)中进行 Microsoft Office 应用程序的“自动化”,也不为此提供支持,因为 Office 在这种环境中运行时可能会出现不稳定的现象并且/或者会死锁。 如果您要构建在服务器端上下文中运行的解决方案,应尽可能尝试使用对于以无人参与方式执行很安全的组件,或找到至少允许一部分代码在客户端运行的备选方案。如果您选择从服务器端解决方案中运行 Office 应用程序,将发现这样会缺少成功运行所必需的许多功能,而且整体解决方案的稳定性会有风险。 使用服务器端 Office 自动化时出现的问题尝试在服务器端解决方案中使用 Office 的开发人员需要了解 Office 的表现因环境而与预期不同的五个主要问题。要成功运行您的代码,就需要解决这些问题,而且需要尽可能减少它们的影响。您在构建应用程序时,要仔细考虑这些问题,因为没有任何一种解决方案能解决所有这些问题,不同的设计要求您优先考虑不同的元素。
除了这些比较大的问题以外,许多客户还发现在不修改其 Office 默认安装的情况下,尝试进行服务器端自动化时可能会遇到下列常见错误之一:
运行服务器端时使用自动化的备选方案Microsoft 极力建议开发人员在需要开发服务器端解决方案时寻找“Office 自动化”的备选方案。由于 Office 设计上的局限性,更改 Office 配置不足以解决所有的问题。Microsoft 提供了很多备选方案建议,这些方案不需要在服务器端安装 Office,而且可以比“自动化”更高效、更迅速地执行大多数常规任务。在将 Office 作为您的项目中的服务器端组件之前,请先考虑备选方案。大多数服务器端“自动化”任务包括创建文档。由于 Office 2000 及更高版本支持 HTML 作为本机文档格式,所以大多数文档可以用 HTML 格式创建,在需要时还可以使用可扩展标记语言 (XML) 标记,而且还可以通过使用多用途 Internet 邮件扩展 (MIME) 类型将数据流传输到客户端,以便在 Office 中显示最终文本。文档可以被编辑和保存,甚至在需要时通过在服务器上使用 ASP 即可将文档返回到服务器。对于 Office 的早期版本,使用其他便于操作的文本格式(例如 RTF)可以实现同样的效果。 有些本机二进制格式可以通过使用 Office Web 组件 (OWC) 或 ActiveX 数据对象 (ADO) 来编辑,速度更快,稳定性也更高。不进行“自动化”也可以查看或更改文档属性,通过使用 FrontPage Server Extensions (FPSE) 或分布式创作及版本控制 (DAV),可以进行文件管理和版本控制。如果必须要进行“自动化”,可以将大多数任务卸载到客户端,这样系统的稳定性和可伸缩性都会更高,因为每个用户都在自己的上下文中用自己的设置运行任务。 有关这些主题中的任意一个以及说明如何实现它们的示例的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 270906?
(http://support.microsoft.com/kb/270906/
)
如何使用 ASP 生成 RTF 文档以将数据流传送到 Microsoft Word
198703?
(http://support.microsoft.com/kb/198703/
)
如何从客户端 VBScript 自动化 Excel
199841?
(http://support.microsoft.com/kb/199841/
)
如何在 IE 中使用 Excel 以 MIME 类型显示 ASP 结果
224351?
(http://support.microsoft.com/kb/224351/
)
使用 Dsofile.dll 可以在 Visual Basic .NET 2003 和 Visual Basic .NET 2002 中没有 Office 的情况下编辑 Office 文档属性
244049?
(http://support.microsoft.com/kb/244049/
)
如何使用服务器端的制作图表功能来动态生成图表
258187?
(http://support.microsoft.com/kb/258187/
)
OWebComp.exe 包含用于 Office 2000 Web 组件的脚本示例
260239?
(http://support.microsoft.com/kb/260239/
)
如何在使用 Active Server Pages 页创建 Excel 文件时设置单元格数据的格式
278973?
(http://support.microsoft.com/kb/278973/
)
ExcelADO 演示如何在 Excel 工作簿中使用 ADO 来读写数据
286023?
(http://support.microsoft.com/kb/286023/
)
如何从 Internet Explorer 中将 VB ActiveX 组件用于 Word 自动化
288130?
(http://support.microsoft.com/kb/288130/
)
如何使用 ASP 构建在客户端显示的 XML 电子表格
317316?
(http://support.microsoft.com/kb/317316/
)
Office Web 组件在服务器端使用时的限制
如果您的业务需要在服务器端创建二进制 Office 文件,有些第三方供应商提供的组件可对您有所帮助。下面的列表列出了提供此类服务的某些著名供应商。此列表仅作为参考。列表的内容并不完整。其他供应商可能会提供更适于您的类似服务。您应当调查所有可能的第三方解决方案,以选择最能满足您的业务需要的供应商。目前,以下供应商提供了一些解决方案,这些方案允许以编程方式创建和编辑本机 Office 文件格式。
有关这些第三方供应商的更多信息,请访问下面的网站:Aia Software B.V. http://www.aia-itp.com
(http://www.aia-itp.com)
Polar
http://www.polarsoftware.com
(http://www.polarsoftware.com)
SoftArtisans
http://www.softartisans.com
(http://www.softartisans.com)
SyncFusion
http://www.syncfusion.com
(http://www.syncfusion.com)
Keylogixhttp://www.activedocs.com
(http://www.activedocs.com)
注意
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。对于这些产品的性能或可靠性,Microsoft 不作任何暗示保证或其他形式的保证。
配置 Office 在服务器端运行如果没有其他可行的解决方案,并且您决定继续在服务器端进行“Office 自动化”,您需要解决前面列出的许多问题才能在这种环境中成功运行。由于大多数问题都是与配置相关的,所以无法给出一套让“Office 自动化”在所有系统的所有情况下都能在服务器端正常运行的步骤。有些配置设置可能会与其他选项冲突,每种方法都各有利弊。您可能需要不断试验,才会找到最适用于您的环境的方案。要从服务器端代码中进行“Office 自动化”,一般需要完成以下任务:
因此,首先要限制服务器端设计中对“Office 自动化”的使用,并且将进程隔离到一台在需要时可以重新启动的不太重要的计算机上。还要隔离调用上下文,这样,挂起的调用客户端就不会降低必不可少的系统服务的性能。例如,不要使用系统线程直接从 IIS 中进行自动化操作,而是要将代码隔离到在它自己的线程上运行,这样,即使它失败,一般也不会影响 IIS 功能。另外,还要考虑您的设计如何实施安全性和身份验证。由于 Office 不实施服务器端安全性,所以您的代码需要确保只有“受信任”的代码模块(例如,ASP 页、脚本文件,等等)才能创建 Office 应用程序的“自动化”实例并调用其方法,还要确保所有文档在您让 Office 打开它们之前都是安全的。服务器上的 Office 应用程序应该无论何时都以“高”安全性运行。如果您的设计不实施安全性,您的服务器就会面临风险! 一旦设计方案就位,您就应该编写防御性代码,以尝试预防问题发生,并在问题发生时处理错误。您的代码一定要传递可选参数的值,因为缺少的或有冲突的值有时要求 Office 提示用户参考更多信息。在所有功能中使用错误陷阱,正确地处理错误条件,并通过使用可以利用一个自定义设置(在注册表或 INI 文件中)来打开或关闭的日志记录代码来记录这些错误。如果您执行一项可能导致出现独立于 Office 显示的错误对话框的操作(例如,打印可能导致打印机驱动程序在打印机缺纸时显示对话框),就要准备处理可能出现的死锁,方法是通过使用超时或第二线程来监控进程。有关更多信息,请参见下面的 Microsoft 知识库文章: 259971?
(http://support.microsoft.com/kb/259971/
)
如何使用 Visual Basic 关闭 Office 应用程序显示的对话框
使用您的日志记录代码来跟踪问题和调试程序。如果您使用自定义对象池,可以添加性能测试和可伸缩性测试,以监控使用情况并记录影响所有客户端的问题。通过一个中央控制程序,您还可以在需要时终止 Office 的错误实例并随后重新创建它们,以增强总体稳定性。在程序准备就绪可以部署之后,一定要在服务器上正确配置 Office,以便运行合适的用户上下文。Office 需要用户配置文件,并且必须确保它在加载时有一个配置文件才能成功实现自动化。在服务器端环境中工作时,有三种方法可以做到这一点:
288366?
(http://support.microsoft.com/kb/288366/
)
如何将 Office 应用程序配置为在交互式用户帐户下运行
第二种方法会指定一个特定用户,但不允许交互性。Office 会在一个不可见的桌面上的新 WinStation 中以被指定用户的身份启动。这种方法需要进行一些其他配置,以确保加载用户注册表配置单元,因为在默认情况下 COM/DCOM 不会做这一步。该设置对于系统来说是全局性的,所以它可能会与其他程序冲突。有关以这种方式配置 Office 的更多信息,请参见以下 Microsoft 知识库文章:
288367?
(http://support.microsoft.com/kb/288367/
)
如何将 Office 应用程序配置为在特定用户帐户下运行
第三种方法允许您为特定网站或代码模块指定一个身份,避免为 Office 全局性地设置一个固定身份。只要以前已经为该计算机配置了该身份并且已经加载了注册表配置单元,Office 就会以该身份运行并正确加载。通常,这种方法是最灵活、最可靠的,但是,像前一种方法一样,这种方法也不提供与某个可见桌面的交互性,而且它也需要额外进行一些设置。有关以这种方式配置 Office 的更多信息,请参见以下 Microsoft 知识库文章:
288368?
(http://support.microsoft.com/kb/288368/
)
如何将 Office 应用程序配置为从 COM+/MTS 包自动运行
您需要评估上述哪种方法适合您的需要,以及如何才能最好地部署您的解决方案。此处提供的信息不保证能够解决所有客户端的所有问题。建议您最好在部署之前彻底地进行测试。参考这篇文章中的信息适用于:
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。 | 文章翻译
|

回到顶端
