Ошибка автоматизации Word на тестовом сервере - PullRequest
0 голосов
/ 20 сентября 2010

Я пытаюсь открыть документ Word из веб-приложения .Net. Код (вкратце) содержит ...

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.

1 Ответ

0 голосов
/ 04 апреля 2011

Я думаю, что это проблема стабильности, присущая автоматическому использованию Microsoft Office на стороне сервера.Это описано более подробно здесь .

...