Auf MSMQ schreiben und auf eine Antwort warten

11. April 2007 09:15

Hallo zusammen!

Ich möchte gerne was von Navision aus ansteuern. Dabei dachte ich direkt an die MSMQ - man sendet was auf die MSMQ und wartet dann auf die Antwort auf der Reply-Queue. Nur leider funktioniert da was nicht.
Ich verwende erstmal den folgenden "Standard"-Code:

CREATE(CC2);
CREATE(MQBus);
CC2.AddBusAdapter(MQBus,1);
MQBus.OpenWriteQueue('.\private$\queue 1',0,0);
MQBus.OpenReplyQueue('.\private$\queue 2',0,0);
MQBus.SenderAuthenticationLevel:= 3;
OutMsg := CC2.CreateoutMessage('Message queue://');
OutS:= OutMsg.GetStream();
OutS.WRITE('Hello world!');
InMsg:= OutMsg.SendWaitForReply(3000);

IF ISCLEAR(InMsg) THEN
MESSAGE('InMsg not received')
ELSE
BEGIN
InS:= InMsg.GetStream();
InS.READ(Txt);
MESSAGE(Txt);
END;


Die Sache verstehe ich dabei so - man schreibt was auf die "queue 1" und wartet dann einige Zeit auf der "queue 2" auf die Antwort. Das versenden einer Nachricht funktioniert ganz gut nur das empfangen funzt nicht so richtig, sagt halt immer "InMsg not received"!
Schreiben der Antwort auf die MSMQ mache ich in .NET:

MessageQueue queue = new MessageQueue(@".\private$\queue 2");
queue.Formatter = new BinaryMessageFormatter();

Message message = new Message();
message.Priority = MessagePriority.Normal;
Stream str = message.BodyStream;
byte[] Bytes = Encoding.ASCII.GetBytes("TEST");

foreach (byte dat in Bytes)
str.WriteByte(dat);
str.WriteByte(0x00);

message.Label = "Navision MSMQ-BA";
message.BodyStream = str;

queue.Send(message);


Mache ich was falsch oder habe ich iregendwo einen Denkfehler?
Danke!

11. April 2007 09:44

Hallo Fritz,

ich habe Dir auf jedenfall einen Tipp, da ich gerade an ähnlichen Problematiken arbeite:
In der Computerverwaltung kannst Du direkt in die Message Queues reinschauen, ob dort die gesuchten Nachrichten hinterlegt sind.
Dann weisst du zumindest schonmal, ob es beim Schreiben in die Queue oder erst beim Auslesen fehlschlägt.

Ich bin mal gespannt, ob Du dann auf die Lösung kommst.

11. April 2007 11:48

Mit den Nachrichten ist alles in Ordnung, da stehen auch fleißig welche drin. Leider werden diese aber von Navision durch
OutMsg.SendWaitForReply(3000);
nicht abgeholt!?!?!

:-x :-x :-x :-x :-x

11. April 2007 12:32

Ich hab mich damals erfolgreich an den Beispielen in der Dokumentation orientiert und mit den Events gearbeitet (Automation Variable, WithEvents=Yes).

Die Doku findest du auf der CD unter

X:\Client\Common\Navision\Communication Component

Hoffe das hilft dir weiter.