如何将WCF项目中的Com对象带到服务器

本文关键字:对象 Com 服务器 WCF 项目 | 更新日期: 2023-09-27 18:00:47

我向服务器发布了WCF服务,它在本地工作,但在服务器中我收到了以下错误:

 Retrieving the COM class factory for component with CLSID.

该服务的工作是在单词模板中添加一些字段,并将其转换为pdf。我的猜测是它在服务器中找不到com对象。我在项目中提到的一个对象是

Microsoft.Office.Interop.Word

我已经添加了这个作为对我的项目的引用。我应该怎么做才能在服务器中安装这个对象?

如何将WCF项目中的Com对象带到服务器

Microsoft.Office.Interop.Word不是设计为在非交互式会话中运行的(例如,在自托管服务或IIS中,在服务器上托管WCF的两种方式)。即使你确实运行了你的代码,你也会开始遇到上面链接中列出的其他问题。

您需要切换到Open XML SDK才能在服务器设置中操作word文档。

编辑:虽然没有直接关系,但看看我的这个老问题,我在哪里犯了和你一样的错误(使用Word自动化在Sharepoint web服务中进行文本替换)。在我发布的关于自己问题的答案中,我有一些关于如何使用OpenXMLSDK替换文本的示例代码。

using (WordprocessingDocument template = WordprocessingDocument.Open(documentStream, true))
{
    template.ChangeDocumentType(DocumentFormat.OpenXml.WordprocessingDocumentType.Document);
    MainDocumentPart mainPart = template.MainDocumentPart;
    mainPart.DocumentSettingsPart.AddExternalRelationship(
        "http://schemas.openxmlformats.org/officeDocument/2006/relationships/attachedTemplate",
        new Uri(templetAddr, UriKind.Absolute));
    ReplaceText(mainPart, "#PracticeName#", PracticeName);
    if(!String.IsNullOrEmpty(EducationDate))
        ReplaceText(mainPart, "#EducationDate#", EducationDate);
    if(!String.IsNullOrEmpty(MainContactInfo))
        ReplaceText(mainPart, "#MainContactInfo#", MainContactInfo);
    if(!String.IsNullOrEmpty(Address))
        ReplaceText(mainPart, "#Address#", Address);
}

几年前,我在Visual Studio的项目属性/"构建"选项卡中遇到过这个问题:

设置平台目标=X86

如果有效,请告诉我。

我同意使用Word Interop的Office自动化不是一个好方法,而OpenXML是最好的方法。但由于它非常复杂,我的建议是查看使用OpenXML的第三方工具包。这样,您就不必花时间学习OpenXML。

尝试搜索"邮件合并和报告工具包"。理想情况下,模板文档应该使用MS Word进行设计或更改,即使是最终用户。该工具包应易于与直观的API一起使用。