[Gelöst] Kommunikation mit NAV über MSMQ

8. Mai 2007 16:12

Hallo!

Ich möchte gerne folgende XML-Daten an NAV über die MSMQ senden und mit einem XMLPort einlesen:
<?xml version="1.0"?>
<A>
<B>test</B>
<C>
<D attr="test1" />
</C>
</A>

Einlesen mache ich so:
Code:
ComCom::MessageReceived(VAR InMessage : Automation "''.IDISPATCH")
InMsg := InMessage;
InStreamQueue := InMsg.GetStream();
XMLPORT.IMPORT(80003, InStreamQueue);

Die XML-Daten versende ich mit .NET(C#) und schreibe diese in die Queue als einfacher Stream rein.

Das Probelm dabei ist dass Daten, anscheind, nicht ganz 'heile' ankommen und es kommt zur folgenden Fehlermeldung:
"Der XML-Parser gibt folgenden schwerwiegenden Fehler zurück: A text/xml declaration may occur only at the very beginning of input. Line Number = 7 Column Number = 16".

Wenn ich versuche dieselben XML-Daten aus einer Datei zu lesen und in XMLPort zu portieren funktioniert es wunderbar:
Code:
TestFile.OPEN('C:\\temp.txt');
TestFile.CREATEINSTREAM(TestStream);
XMLPORT.IMPORT(80003, TestStream);
TestFile.CLOSE();



Wieso kann ich die Daten über die MSMQ nicht einlesen?
Zuletzt geändert von f.ritz am 22. Juni 2007 14:16, insgesamt 1-mal geändert.

8. Mai 2007 16:29

Moin,

hast Du Dir mal die MSQM-Nachricht angesehen ?
Sieht die genauso aus wenn Du eine von Navision raussendest ?
Ich hatte mal ein Problem mit UTF8 und UTF16.

Gruß Hoschi Blume

9. Mai 2007 16:24

Die Messages sehen immer gleich aus, egal ob ich es mit einer .NET-Komponente oder mit Navision verschicke. Beide Varianten können aber auch nicht gelesen werden!?!?!
Nur, wie gesagt, wenn ich Daten von einer Datei lese funktioniert alles wunderbar!?!?!

9. Mai 2007 16:45

Hi,

wann genau bekommst Du die Fehlermeldung ?
Kommt sie beim Zugriff auf MSMQ oder erst bei XMLPort Aufruf ?

Wenn es bei Aufruf des XMLPorts kommt, versuche doch mal die eingehende Nachricht in eine Datei zu schreiben.

Gruß Hoschi Blume


Sonst schau mal hier

Talking with Navision

9. Mai 2007 17:13

Das habe ich auch schon versucht!
Das Problem dabei ist, dass wenn ich es in eine Datei, wie folgt, reinschreibe:
Code:
TestFile.CREATE('C:\\temporaer.txt');
TestFile.OPEN('C:\\temporaer.txt');
REPEAT
  InStream.READTEXT(Char);
  TestFile.WRITE(Char);
UNTIL InStreamQueue.EOS;
TestFile.CLOSE;


Sehen die XML-Daten, in der Datei, wie folgt aus:
< ? x m l v e r s i o n = " 1 . 0 " ? >
< A >
< B > t e s t < / B >
< C >
< D a t t r = " t e s t 1 " / >
< / C >
< / A >

Werden also immer durch ein Leerzeichen getrennt!

Dann kann ich diese auch schlecht lesen!!!

9. Mai 2007 17:30

Ah ja! Jetzt habe ich die Lösung für das Schreiben in die Datei und somit um XML-DAten zu lesen!

Code:
TestFile.CREATE('C:\\temporaer.txt');
TestFile.OPEN('C:\\temporaer.txt');
TestFile.TEXTMODE(TRUE);
TestFile.CREATEOUTSTREAM(OutStream);
REPEAT
  InStream.READTEXT(Char);
  TestFile.WRITE(Char);
  OutStream.WRITETEXT(Char);
UNTIL InStreamQueue.EOS;
TestFile.CLOSE;


Danke Hoschi Blume! :-D :-D :-D :-D :-D

9. Mai 2007 17:33

Versuchmal

InMsg := InMessage;
InS := InMsg.GetStream();
XMLDom.load (InS);
XMLDOM.save('c:\test.xml);

Gruß Hoschi