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!