0

我正在尝试从 .Net Web 应用程序打开 Word 文档。代码(简而言之)包含...

using Word = Microsoft.Office.Interop.Word;
using System.Reflection;

并且,实际创建文档的代码包括:

object oMissing = System.Reflection.Missing.Value;
object oEndOfDoc = "\\endofdoc"; // \endofdoc is a predefined bookmark 
object oTemplate = WebConfigurationManager.AppSettings["GuidelineRepsTemplate"]; //this points to a .doc I am using as a template

//Start Word and create a new document.
    Word._Application oWord;
    Word._Document oDoc;
    oWord = new Word.Application();
    oWord.Visible = true;
    oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing, ref oMissing, ref oMissing);

    object oBookMark = "Representative";
    oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = lblRecipient.Text;

    object oBookMark1 = "Guidelines";
    oDoc.Bookmarks.get_Item(ref oBookMark1).Range.Text = Guidelines.ToString();

object fileName = WebConfigurationManager.AppSettings["GuidelineRepsPath"] + ContactID.ToString() + "\\" + fileString2 + ".doc";
        object FileFormat = Word.WdSaveFormat.wdFormatDocument;
        oDoc.SaveAs(ref fileName, ref FileFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

我用作模板的 Word 文档中有两个书签,我在上面的代码中填充了这些书签。

在我的开发箱上一切正常。该文档在 Word 中打开,用户可以根据需要进行更改,并将其保存在我为其创建的目录中(上面未显示目录代码)。

当我发布到测试服务器时 - 每次运行它时都会出现此错误:

The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER)) 

堆栈跟踪无法确定问题所在 - 一个示例是:

[COMException (0x8001010a): The message filter indicated that the application is busy. (Exception from HRESULT: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))]
Microsoft.Office.Interop.Word.DocumentClass.get_Bookmarks() +0
SendConfirmEmailReps.CreateDocs(Int32 ContactID, Int32 OrganisationID) +942
SendConfirmEmailReps.Page_Load(Object sender, EventArgs e) +317
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

这表明书签有问题。所以我取出了对书签的引用,并开始使用一个名为 Hello.doc 的文件作为我的模板。没有书签——只有“你好”这个词。

这也失败了 - 但 StackTrace 表明它是在调用 SaveAs 时。

所以,问题是......为什么它可以在我的开发盒上运行,但不能在服务器上运行。服务器上安装了 Word。

4

1 回答 1

0

我认为这是服务器端无人值守使用 Microsoft Office 自动化所固有的稳定性问题。这里有更详细的描述。

于 2011-04-04T09:43:07.503 回答