在 WCF 错误中创建 MS-Word 2003?

Posted

技术标签:

【中文标题】在 WCF 错误中创建 MS-Word 2003?【英文标题】:Create MS-Word 2003 in WCF Error? 【发布时间】:2010-09-20 09:37:15 【问题描述】:

我使用 MS-Word 2003 API(Microsoft.Office.Interop.Word) 构建了关于报告的 WCF 解决方案,但出现此错误:

2010-09-17 16:31:39,218 [21] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext()
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)
2010-09-17 16:31:49,578 [22] ERROR ERROR [(null)] - Error generator timeout 0900000a80395799
2010-09-17 16:31:49,812 [14] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BF): The remote procedure call failed and did not execute. (Exception from HRESULT: 0x800706BF)
   at Microsoft.Office.Interop.Word.ApplicationClass.get_Documents()
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)
2010-09-17 16:31:50,046 [18] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
   at Microsoft.Office.Interop.Word.ApplicationClass.get_Documents()
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)
2010-09-17 16:31:50,968 [22] ERROR ERROR [(null)] - Error generator timeout 0900000a80395799
2010-09-17 16:31:50,984 [10] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BE): The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
   at Microsoft.Office.Interop.Word.Documents.Open(Object& FileName, Object& ConfirmConversions, Object& ReadOnly, Object& AddToRecentFiles, Object& PasswordDocument, Object& PasswordTemplate, Object& Revert, Object& WritePasswordDocument, Object& WritePasswordTemplate, Object& Format, Object& Encoding, Object& Visible, Object& OpenAndRepair, Object& DocumentDirection, Object& NoEncodingDialog, Object& XMLTransform)
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)

不知道为什么这个API调用RPC服务,是否支持Word2003在web服务器上并发生成

提前致谢

【问题讨论】:

【参考方案1】:

不支持服务器端的文字自动化(没有 UI),这会导致非常奇怪的问题。您最好使用OpenXml 库来创建word 文档。

【讨论】:

【参考方案2】:

不支持使用任何类型的服务中的任何 Office 产品,可能会违反您的许可,更糟糕的是,只是普通无法正常工作。这些是桌面应用程序,并且是在假设它们由一个人在台式计算机上使用的情况下编写的。在服务器上运行它们,你违反了大量的假设。

【讨论】:

【参考方案3】:

我们遇到了同样的问题,然后我们切换到在 xml (Word Processing ML) 中生成 word 文档。结果非常好。

但是,作为替代方案,您可能可以通过创建 Windows 服务(而不是 Web 服务)来摆脱困境。具有适当权限的 Windows 服务可能能够使用 Word 进程。

您还需要检查服务器上的 DCOM 设置:ControlPanel -> ComponentServices -> Computers -> MyComputer -> DCOM Config -> Microsoft Office Word...然后打开属性并检查用于运行 Word 的安全性和身份。

如果还有其他问题(因为可能会有互操作),则可以找到有关注册表 CLASSID 等的进一步帮助,但请等到您到达那里(我们没有无缘无故地使用 xslt 生成 word xml :) )。

【讨论】:

"如果还有其他问题..." 会有的。当没有 UI 时,Word 不会改变其工作方式,如果它试图通过对话框向用户询问问题,应用程序将锁定,因为没有人会看到它。此外,很多时候它不会正常关闭并且会保留在内存中,浪费资源直到您的 Web 服务器或 Windows 服务关闭,等等......仅在客户端使用自动化......但只有在没有替代方法的情况下! 是的,同意...总有一种解决方法-例如,我们手动终止了文字处理等...但是正如您所说,无法与GUI对话框交互(有,但那太多了),这就是我们放弃自动化的最后一个原因。我也建议切换到 WordprocessingML... @John Saunders - -1 提供替代方案?它可以完成,它正在完成 - 我没有说这是一个好的解决方案,但它是一个选项。正如您所读到的 - 我也不建议这样做,但有时您没有时间以正确的方式实施它,并且不得不“破解”它,即使只是暂时......跨度> 替代方案比问题更糟糕。 Office 应用程序应该从不从服务中使用。期间。

以上是关于在 WCF 错误中创建 MS-Word 2003?的主要内容,如果未能解决你的问题,请参考以下文章

在客户端应用程序中,在代码中创建 WCF 终结点配置?

从 ms-access 获取数据到 ms-word

用代码在 IIS 中创建 wcf 服务

如何在代码而不是配置中创建 WCF EndPointBehaviors?

在服务实现中创建 System.Windows.Control 时,WCF 服务不起作用

保存在 WCF 服务中创建的列表,以便在服务重新启动时查看它