首先介绍一下:我知道服务器环境不支持MS Office互操作 . 无论如何,我被告知要让它工作 .
我从一位离开公司的开发人员那里继承了一个项目 . 该项目涉及将用户上传到我们网站的任意1-2页文档转换为PDF格式 . 这些文档主要是Office文档 . 在我的头脑中,我们接受doc,docx,txt和rtf文档以及可能的其他文档 . 这些文件必须在以后以原始格式和PDF格式提供 . 开发人员认为,实现这一目标的最佳方法是使用MS Office互操作并让Word处理转换 .
在他的工作站和我的工作站上它工作得很好,但是一旦网站发布到服务器就失败了 . 它不仅失败,Word打开并消耗越来越多的内存,直到它最终锁定服务器并且服务器必须重启电源 .
我已经在这一段时间内打了一针 . 大多数在线的其他人我发现有问题报告了错误信息,但我没有发现任何人报告服务器只是锁定 . 然而,我在三个不同的服务器上观察到完全相同的行为 . 我尝试将代码包装在Windows服务中(而不是IIS中的aspx页面)并观察到相同的行为 . 我将代码包装在winforms应用程序中,它运行得很好 . 要点如下:
Dim wordApplication As Microsoft.Office.Interop.Word.ApplicationClass = New ApplicationClass()
Dim wordDocument As Microsoft.Office.Interop.Word.Document = Nothing
Try
wordDocument = wordApplication.Documents.Open(CType(fileUrl, Object), False, True)
If wordDocument IsNot Nothing Then
wordDocument.ExportAsFixedFormat(pdfUrl, WdExportFormat.wdExportFormatPDF)
End If
Finally
If wordDocument IsNot Nothing Then
wordDocument.Close(False)
wordDocument = Nothing
End If
If wordApplication IsNot Nothing Then
wordApplication.Quit()
wordApplication = Nothing
End If
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()
End Try
还有其他人处理过这样的问题吗?
1 回答
该决议需要几个步骤:
似乎冻结是由wordApplication.Quit()调用引起的 . 传入False以禁止保存对话框解决了冻结问题 . 虽然文件还没有打开......
为此,我必须打开windows \ System32 \ comexp.msc,并在“控制台根目录”>“组件服务”>“计算机”>“我的电脑”>“DCOM配置”>“Microsoft Word”中选择“属性”上下文菜单选项97 - 2003年文件“ . 在“标识”选项卡上,选择“交互式用户” . 而不是“启动用户” .
在另一台服务器上,这就是我必须要解决的问题,但如果这还不够,这个线程有许多其他可能的解决方案:https://social.msdn.microsoft.com/Forums/en-US/0f5448a7-72ed-4f16-8b87-922b71892e07/word-2007-documentsopen-returns-null-in-aspnet