Autor Beitrag
schind
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 29.03.07 14:15 
Hi Leute! Ich bin schon total verzweifelt und hoffe ihr könnt mir helfen ;) Wäre echt nett, wenn ihr euch die Zeit nehmen würdet, das doch relativ lange Posting zu lesen.

Ich programmiere ein Webservice, das eine XML - Datei vom MS Sharepoint Server übergeben bekommt. Die Daten dieser XML - Datei sollen ausgelesen und mithilfe einer Word-Vorlage soll ein Word-Dokument (Bestellformular) daraus generiert werden.

Das ganze funktioniert auf meinem lokalen Rechner wunderbar, wenn ich das ganze allerdings auf dem Webserver (IIS 6) laufen lasse, und den Webservice aufrufen möchte, funktioniert es nicht. Da der Aufruf des Webservices in MS InfoPath integriert ist, kann ich leider keine Rückgaben (Exceptions etc.) am Bildschirm sehen, deshalb schreibe ich alle Debugausgaben in eine Datei. Aufgrund dieser Ausgaben (Habe ich hier im Code nicht eingebunden) kann ich sagen, dass das Programm in Zeile 12 oder 13 nicht mehr reagiert.
Zusätzlich wird am Webserver in der Ereignisanzeige unter Microsoft Office Sessions die folgende Meldung angezeigt:
Zitat:
Ereignistyp: Warnung
Ereignisquelle: Microsoft Office 12 Sessions
Ereigniskategorie: Keine
Ereigniskennung: 7003
Datum: 29.03.2007
Zeit: 14:05:44
Benutzer: Nicht zutreffend
Computer: ECSHAREPIONT01
Beschreibung:
ID: 0, Application Name: Microsoft Office Word, Application Version: 12.0.4518.1014, Microsoft Office Version: 12.0.4518.1014. This session was terminated unexpectedly.

Außerdem sehe ich den Prozess WINWORD.EXE, der unter dem User NETZWERKDIENST läuft und anscheinend auf irgend etwas wartet, denn wenn ich ihn beende kommt die Exception:
Zitat:
System.Runtime.InteropServices.COMException (0x800706BE): Der Remoteprozeduraufruf ist fehlgeschlagen. (Ausnahme von HRESULT: 0x800706BE)
bei Microsoft.Office.Interop.Word.Documents.Add(Object& Template, Object& NewTemplate, Object& DocumentType, Object& Visible)
bei Service.createDoc() in c:\Inetpub\wwwroot\wss\VirtualDirectories\4700\App_Code\Service.cs:Zeile 186.neues xmldocument wurde erstellt


Ich bin wirklich schon verzweifel, sitze seit gestern und versuche den Fehler zu beheben, doch leider schaffe ich es nicht. Ich hoffe wirklich jemand nimmt sich die Zeit, das Programm durchzusehen. Es sieht zwar nach viel Code aus, der Fehler tritt allerdings schon sehr früh auf.

Vielen Dank!
lg, Schind
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
[WebMethod]
    public string createDoc()
    {
        // Das XML - File laden und konvertieren.        
        xmlstring.Replace('\n'' ');     
        XmlDocument xmldoc = new XmlDocument();    
        xmldoc.Load("C:\\Inetpub\\wwwroot\\wss\\VirtualDirectories\\4700\\xmldata\\bestellung_temp.xml");
        XmlNamespaceManager nsManager = new XmlNamespaceManager(xmldoc.NameTable);
        nsManager.AddNamespace("my""http://schemas.microsoft.com/office/infopath/2003/myXSD/2005-10-21T21:12:27");
        // Für die fehlenden Werte den entsprechenden value definieren
        object missing = System.Reflection.Missing.Value;    
        Word.ApplicationClass oWordApp = new Word.ApplicationClass();
        Word.Document oWordDoc = new Word.Document();
    try
        {
            oWordApp = new Word.ApplicationClass();
            // Template definieren
            object oTemplate = "C:\\Inetpub\\wwwroot\\wss\\VirtualDirectories\\4700\\xmldata\\vorlage_bestellung.dotx";
            oWordDoc = oWordApp.Documents.Add(ref oTemplate, ref missing, ref missing, ref missing);
        }
        catch (Exception exc)
        {
            sw = new StreamWriter(new FileStream("C:\\Inetpub\\wwwroot\\wss\\VirtualDirectories\\4700\\xmldata\\bestellung_temp1.xml", FileMode.Append));
            sw.Write(exc.ToString());
            sw.Close();
        }
        oWordDoc.Activate();
        // Den Firmennamen setzen
        object oBookMark = "Firma";
        string xpathquery = "/my:expenseReport/my:items/my:item/my:distributor";
        XmlNode lieferantenNode = xmldoc.SelectSingleNode(xpathquery, nsManager);
        oWordDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = lieferantenNode.InnerText + "\n";
        
        // Die Bestellnummer setzen
        oBookMark = "BestNr";
        xpathquery = "/my:expenseReport/my:bestellnummer";
        XmlNode bestNode = xmldoc.SelectSingleNode(xpathquery, nsManager);
        oWordDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = bestNode.InnerText;
        int bestellnummer = 0;
        try
        {
            bestellnummer = Convert.ToInt32(bestNode.InnerText);
        }
        catch (Exception)
        { return "Fehler"; }

        // die bestelltabelle füllen
        oBookMark = "BestTab";
        Word.Table oTable;
        Word.Range wrdRng = oWordDoc.Bookmarks.get_Item(ref oBookMark).Range;

        // Tabellenzeilen hängen von den Einträgen im XML - File ab
        XmlNodeList items = xmldoc.GetElementsByTagName("my:item");

        oTable = oWordDoc.Tables.Add(wrdRng, items.Count + 25ref missing, ref missing);
        oTable.Range.ParagraphFormat.SpaceAfter = 6;

        // Überschriftenzeile erstellen
        oTable.Cell(11).Range.Text = "Pos.";
        oTable.Columns[1].Width = 30;
        oTable.Cell(12).Range.Text = "Menge";
        oTable.Columns[2].Width = 40;
        oTable.Cell(13).Range.Text = "Artikelnummer/Bezeichnung";
        oTable.Columns[3].Width = 250;
        oTable.Cell(14).Range.Text = "Einzelpreis";
        oTable.Columns[4].Width = 80;
        oTable.Cell(15).Range.Text = "Gesamtpreis";
        oTable.Columns[5].Width = 80;

        // Füllen der Zeilen mit den Werten aus dem XML - File
        int activeItem = 1;
        foreach (XmlNode item in items)
        {
            oTable.Cell(++activeItem, 1).Range.Text = item.SelectSingleNode("my:position", nsManager).InnerText;
            oTable.Cell(activeItem, 1).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
            oTable.Cell(activeItem, 2).Range.Text = item.SelectSingleNode("my:stueck", nsManager).InnerText;
            oTable.Cell(activeItem, 2).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
            oTable.Cell(activeItem, 3).Range.Text = item.SelectSingleNode("my:description", nsManager).InnerText;
            oTable.Cell(activeItem, 4).Range.Text = item.SelectSingleNode("my:ep", nsManager).InnerText + " €";
            oTable.Cell(activeItem, 4).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
            oTable.Cell(activeItem, 5).Range.Text = item.SelectSingleNode("my:amount", nsManager).InnerText + " €"; ;
            oTable.Cell(activeItem, 5).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
        }

        // Summenzeile erzeugen
        oTable.Cell(oTable.Rows.Count, 1).Merge(oTable.Cell(oTable.Rows.Count, 4));
        oTable.Cell(oTable.Rows.Count, 1).Range.Text = "Summe:";
        oTable.Cell(oTable.Rows.Count, 1).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
        xpathquery = "/my:expenseReport/my:items/my:total";
        XmlNode totalNode = xmldoc.SelectSingleNode(xpathquery, nsManager);
        oTable.Cell(oTable.Rows.Count, 2).Range.Text = totalNode.InnerText + " €";
        oTable.Cell(oTable.Rows.Count, 2).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;

        // 1. und letzte Zeile fett
        oTable.Rows[1].Range.Font.Bold = 1;
        oTable.Rows[oTable.Rows.Count].Range.Font.Bold = 1;

        oTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
        oTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;
        object filename = "C:\\Inetpub\\wwwroot\\wss\\VirtualDirectories\\4700\\xmldata\\bestellung_" + bestellnummer + ".docx";
        oWordDoc.SaveAs(ref filename, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
        object savechanges = false;        
        oWordDoc.Close(ref savechanges, ref missing, ref missing);
        oWordApp.Quit(ref savechanges, ref missing, ref missing);
        return "alles ok";
    }
Einloggen, um Attachments anzusehen!