views:

63

answers:

2

I built WCF solution about reporting by using MS-Word 2003 API(Microsoft.Office.Interop.Word) but I got this error :

2010-09-17 16:31:39,218 [21] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext()
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)
2010-09-17 16:31:49,578 [22] ERROR ERROR [(null)] - Error generator timeout 0900000a80395799
2010-09-17 16:31:49,812 [14] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BF): The remote procedure call failed and did not execute. (Exception from HRESULT: 0x800706BF)
   at Microsoft.Office.Interop.Word.ApplicationClass.get_Documents()
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)
2010-09-17 16:31:50,046 [18] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
   at Microsoft.Office.Interop.Word.ApplicationClass.get_Documents()
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)
2010-09-17 16:31:50,968 [22] ERROR ERROR [(null)] - Error generator timeout 0900000a80395799
2010-09-17 16:31:50,984 [10] ERROR ERROR [(null)] - Error : Generate 0900000a80395799
System.Runtime.InteropServices.COMException (0x800706BE): The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
   at Microsoft.Office.Interop.Word.Documents.Open(Object& FileName, Object& ConfirmConversions, Object& ReadOnly, Object& AddToRecentFiles, Object& PasswordDocument, Object& PasswordTemplate, Object& Revert, Object& WritePasswordDocument, Object& WritePasswordTemplate, Object& Format, Object& Encoding, Object& Visible, Object& OpenAndRepair, Object& DocumentDirection, Object& NoEncodingDialog, Object& XMLTransform)
   at FactoryService.Generator.Generate(Task& task, IDfSession& mySession)
   at FactoryService.Generator.Generate(Object t)

I don't know why this API call RPC Service and Does it support Word2003 concurrent generating in on web server

Thanks in advance

A: 

Word automation in server side (without UI) is not supported, and leads to very strange problems. You better use the OpenXml libraries for creating word documents.

jmservera
A: 

We had the same problem, and then we switched to generating word documents in xml (Word Processing ML). It turned out very well.

But, as an alternative you could probably get away by creating a windows service (not web service). Windows service with proper rights would probably be able to use Word process.

You also need to check DCOM settings on server: ControlPanel -> ComponentServices -> Computers -> MyComputer -> DCOM Config -> Microsoft Office Word... then open properties and check the Security and Identity used to run Word.

If there's further problems (as there probably will be with interop) there's further help to be found regarding the registry CLASSID etc, but wait 'till you get there (we didn't move to xslt's for generating word xml without a reason :) ).

veljkoz
"If there's further problems..." there will be. Word does not change its way of working when there is no UI, and if it tries to ask the user a question with a dialog the application will lock because nobody will see it. Furthermore, many times it will not close gracefully and will remain in memory, wasting resources till your web server or windows service goes down, and so on... Use automation at client side only... but only when there is no alternative method!
jmservera
Yes, agreed... there's always a workaround - for instance, we killed word process manually, etc... but as you've said there's no way to interact with GUI dialog boxes (there is, but that would be too much), and that's the final reason why we gave up automation. I recommend switching to WordprocessingML as well...
veljkoz