Communication Component Problem mit Reply

12. Oktober 2011 11:06

Hallo zusammen,
ich habe mich die letzten Tage mit den Communications Components beschäftigt und habe nun eine Frage dazu bzw. ein Problem.

Ich habe zwei Testcodeunits geschrieben, welche untereinander Nachrichten austauschen sollen auf verschiedenen PCs.

Dafür dient ein PC als Empfänger und der andere sendet ihm eine Nachricht.

Die Nachricht kann ich ohne Probleme übertragen. Das funktioniert soweit. Ich hätte nur gerne vom Empfänger eine Reply Message zurückerhalten.
Das funktioniert leider nicht so wie ich mir das vorstelle. Meine Rückantwort ist immer leer, solange die Kommunikation auf zwei unterschiedlichen Rechnern passiert.
Stelle ich das Ganze aber auf einem einzelnen Rechner nach (D.h. den Client auf einem Rechner zweimal öffnen), funktioniert es einwandfrei.

Hat sich mit dem Thema schon mal jemand beschäftigt?

Hier ist mein Testcode, den ich mit Hilfe der devguide.chm erstellt habe. (In Textdatei kopieren und importieren)

Code:
OBJECT Codeunit 50998 Send IP Port mit Reply
{
  OBJECT-PROPERTIES
  {
    Datum=12.10.11;
    Zeit=10:45:06;
    Ge„ndert=Ja;
    Versions Liste=SalAG;
  }
  PROPERTIES
  {
    OnRun=BEGIN
            Send('localhost',8079);
          END;

  }
  CODE
  {
    VAR
      CC2@1000000000 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{01018FA5-E4B4-413C-A47C-AD34B0CC2647}:'Navision Communication Component version 2'.CommunicationComponent" WITHEVENTS;
      SBA@1000000001 : Automation "{CF450AFF-91CE-4DF0-92DE-AFE4C28AAFC7} 1.0:{4CBE9566-34EA-429D-963A-911E270CBE4F}:'Navision Socket Bus Adapter'.SocketBusAdapter";
      OutMsg@1000000002 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{6CB9762C-E61C-4F96-BA34-8B20D3A5B46E}:'Navision Communication Component version 2'.OutMessage";
      ReplyMsg@1000000004 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{D184D0AC-61C9-4AC1-B537-0D28C277FEDE}:'Navision Communication Component version 2'.InMessage";
      OutS@1000000003 : OutStream;
      InStrm@1000000006 : InStream;
      Reply@1000000005 : Boolean;
      txt@1000000007 : Text[1000];
      retval@1000000008 : Integer;

    PROCEDURE Send@1000000000(Receiver@1000000000 : Text[30];Port@1000000001 : Integer);
    BEGIN
      IF ISCLEAR(CC2) THEN
        CREATE(CC2);
      IF ISCLEAR(SBA) THEN
        CREATE(SBA);

      CC2.AddBusAdapter(SBA, 0);
      OutMsg:= CC2.CreateoutMessage('Sockets://' + Receiver + ':' + FORMAT(Port));

      OutS:= OutMsg.GetStream();
      OutS.WRITE('KOM0000000,4,1,2');

      ReplyMsg := OutMsg.SendWaitForReply(10);

      InStrm := ReplyMsg.GetStream;

      WHILE NOT (InStrm.EOS) DO
      BEGIN
        InStrm.READ(txt);
        MESSAGE(txt);
      END;


      MESSAGE(txt);

      ReplyMsg.CommitMessage;

      MESSAGE('fertig');
    END;

    EVENT CC2@1000000000::MessageReceived@1(VAR InMessage@1000000000 : Automation ":{00020400-0000-0000-C000-000000000046}:''.IDISPATCH");
    BEGIN
    END;

    BEGIN
    END.
  }
}

OBJECT Codeunit 51000 Receive Msg IP Port mit Reply
{
  OBJECT-PROPERTIES
  {
    Datum=11.10.11;
    Zeit=15:32:46;
    Ge„ndert=Ja;
    Versions Liste=SalAG;
  }
  PROPERTIES
  {
    SingleInstance=Ja;
    OnRun=BEGIN
            Start(8079);
          END;

  }
  CODE
  {
    VAR
      CC2@1000000000 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{01018FA5-E4B4-413C-A47C-AD34B0CC2647}:'Navision Communication Component version 2'.CommunicationComponent" WITHEVENTS;
      SBA@1000000001 : Automation "{CF450AFF-91CE-4DF0-92DE-AFE4C28AAFC7} 1.0:{4CBE9566-34EA-429D-963A-911E270CBE4F}:'Navision Socket Bus Adapter'.SocketBusAdapter";
      InMsg@1000000002 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{D184D0AC-61C9-4AC1-B537-0D28C277FEDE}:'Navision Communication Component version 2'.InMessage";
      InS@1000000003 : InStream;
      txt@1000000004 : Text[1000];
      Reply@1000000005 : Boolean;
      ReplyMsg@1000000006 : Automation "{F9A57667-8AC5-45C5-9416-99D3955BCAC0} 1.0:{6CB9762C-E61C-4F96-BA34-8B20D3A5B46E}:'Navision Communication Component version 2'.OutMessage";
      OutStrm@1000000007 : OutStream;

    PROCEDURE Start@1000000000(Port@1000000000 : Integer);
    BEGIN
      IF ISCLEAR(CC2) THEN
        CREATE(CC2);
      IF ISCLEAR(SBA) THEN
        CREATE(SBA);

      CC2.AddBusAdapter(SBA, 0);
      SBA.OpenSocket(Port, '');
    END;

    EVENT CC2@1000000000::MessageReceived@1(VAR InMessage@1000000000 : Automation ":{00020400-0000-0000-C000-000000000046}:''.IDISPATCH");
    BEGIN
      InMsg:= InMessage;

      InS:= InMsg.GetStream();

      WHILE NOT (InS.EOS) DO
      BEGIN
        InS.READ(txt);
        MESSAGE(txt);
      END;

      Reply := InMsg.ExpectReply;

      IF Reply THEN BEGIN

        ReplyMsg := InMsg.CreateReply;

        OutStrm := ReplyMsg.GetStream;

        OutStrm.WRITETEXT('Reply message',13);

        ReplyMsg.Send(0);

      END;

      InMsg.CommitMessage();
    END;

    BEGIN
    END.
  }
}



Ich hoffe es kann mir jemand weiterhelfen.

Vielen Dank.