首页 文章

Office 2013 Interop on Server 2012:Word冻结主机

提问于
浏览
0

首先介绍一下:我知道服务器环境不支持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 回答

  • 0

    该决议需要几个步骤:

    似乎冻结是由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

相关问题