Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi: SOAP zwischen 2 Rechnern (https://www.delphipraxis.net/190962-delphi-soap-zwischen-2-rechnern.html)

derseitzer 24. Nov 2016 08:51

Delphi: SOAP zwischen 2 Rechnern
 
Guten Tag,
Ich habe einen SOAP-Service ganz nach dieser Anleitung programmiert: http://chapmanworld.com/2015/03/30/c...ces-in-delphi/
Es klappt alles wie beschrieben.
Nun möchte ich aber das, was ich als Request auf der linken Seite eingebe, auf einem zweiten PC abrufen.
Hat jemand eine Idee oder schonmal was damit gemacht?
Gedanke: ich packe irgendwie nur den "Information holen"-Teil in einen neuen Button, spiele das Programm auf beide Rechner, drücke bei einem "ECHO" und beim anderen auf
den neuen "Information holen"-Button und die Information ist auf dem zweiten Rechner.
Problem: Es wird alles mit "Echo"-Funktionen beschrieben und ich will ja eigentlich kein Echo sondern ich will die Information auf den anderen Recner bekommen.

Vielen Dank für jegliche Hilfe

Rollo62 24. Nov 2016 10:01

AW: Delphi: SOAP zwischen 2 Rechnern
 
Ich verstehe nicht genau was du meinst:

Du hast Client.exe und Server.exe.

Ein Rechner ist Server, da läuft Server.exe.
Ein oder mehrere Rechner sind Clients, mit Client.exe.
Der Client muss natürlich die IP-Adresse zum Server angeben damit das läuft.

Ein oder mehrere Clients können mit dem einen Server kommunizieren, oder willst du mit 2 Servern kommunizieren ?
Wenn ja, warum ?

Rollo

derseitzer 24. Nov 2016 10:12

AW: Delphi: SOAP zwischen 2 Rechnern
 
Rollo erstmal danke für deine Hilfe:)
Wenn ich zwischen zwei Rechnern eine Kommunikation aufbauen will, kann ich doch auf einem der Rechner gleichzeitig den Server laufen lassen richtig?
Muss ich dann meine Ip-Adressen auf meinen Rechnern ändern? im Delphi Programm wird sie ja nirgends erwähnt.

ChrisE 24. Nov 2016 10:26

AW: Delphi: SOAP zwischen 2 Rechnern
 
Hallo,

wenn du die Beispielsourcen zu der Anleitung runter lädst, findest du in der Unit "unitIMyService.pas" die Methode GetIMyService. Darin siehst du, dass bei der Adresse immer auf "Localhost" mit Port 8080 zugegriffen wird.

Diesen Teil solltest du anpassen. Eine Möglichkeit ist es z.B. die "GetIMyService" per overload die Parameter "IPAdress: string; Port: Word" mit zu geben. Dadurch kannst du dich dann auf jeden PC mit diesem Service verbinden.

Gruß, Chris

derseitzer 24. Nov 2016 10:59

AW: Delphi: SOAP zwischen 2 Rechnern
 
das hier wäre ja die Funktion:
function GetIMyService(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IMyService;
heißt ich müsst (system.false;192.168.x.y; nil) übergeben oder?:/

Und wenn das funktionieren würde, den server und client auf einem rechner laufen zu lassen und mich mit einem zweiten Rechner mit der oben genannten Funktion zu verbinden, dann hab ich ja trotzdem noch keine Möglichkeit einzusehen, was Rechner 1 geschickt hat oder doch?
Tut mir leid, dass ich mich mit dem ganzen einfach 0 auskenne...

ChrisE 24. Nov 2016 11:48

AW: Delphi: SOAP zwischen 2 Rechnern
 
Zitat:

Zitat von derseitzer (Beitrag 1354576)
das hier wäre ja die Funktion:
function GetIMyService(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IMyService;
heißt ich müsst (system.false;192.168.x.y; nil) übergeben oder?:/

Ja, dass stimmt fast. Du kannst die Funktion verwenden wie sie ist, dann musst ud aber bei Addr -> "http://192.168.x.y:8080/wsdl/IMyService" übergeben (Vorausgesetzt: Du willst wsdl & der Port ist 8080.

Ich dachte mehr an sowas:
Delphi-Quellcode:
const
  defWSDL = 'http://%s:%d/wsdl/IMyService';
  defURL = 'http://%s:%d/soap/IMyService';
  defSvc = 'IMyServiceservice';
  defPrt = 'IMyServicePort';

function GetFullAdress(UseWSDL: Boolean; IPAdress: string; Port: Word): string;
begin
  if UseWSDL then result := defWSDL
             else result := defURL;
  result := Format(result, [IPAdress, Port]);
end;

function GetIMyService(UseWSDL: Boolean; IPAdress: string; Port: Word; HTTPRIO: THTTPRIO): IMyService;
begin
  result := GetIMyService(UseWSDL, GetFullAdress(UseWSDL, IPAdress, Port), HTTPRIO);
end;

function GetIMyService(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IMyService;
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    Addr := GetFullAdress(UseWSDL, 'localhost', 8080);
    //if UseWSDL then
    //  Addr := defWSDL
    //else
    //  Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IMyService);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;
Zitat:

Zitat von derseitzer (Beitrag 1354576)
Und wenn das funktionieren würde, den server und client auf einem rechner laufen zu lassen und mich mit einem zweiten Rechner mit der oben genannten Funktion zu verbinden, dann hab ich ja trotzdem noch keine Möglichkeit einzusehen, was Rechner 1 geschickt hat oder doch?

Das hängt vom Server ab. Du könntest entsprechende Funktionen etc. ja dort implementieren für die Clients.
Aber evtl. solltest du dein Problem nochmals etwas genauer beschreiben - also was möchtest du wirklich umsetzen?

Gruß, Chris

derseitzer 24. Nov 2016 12:12

AW: Delphi: SOAP zwischen 2 Rechnern
 
Mit diesem Code hier vom Client versuche ich mich ja zum Server zu connecten:
procedure TForm2.Button1Click(Sender: TObject);
var
Service: IMyService;
ReqEmployee: TMyEmployee;
ResEmployee: TMyEmployee;
begin
// capture interface to service
Service := unitIMyService.GetIMyService(system.False,'http://192.168.0.1:8080/wsdl/IMyService',nil); // hier die ip vom rechner mit server eingetragen
// build the request
ReqEmployee := TMyEmployee.Create;
try
ReqEmployee.FirstName := edtReqFirstName.Text;
ReqEmployee.LastName := edtReqLastName.Text;
ReqEmployee.Salary := Trunc(spedReqSalary.Value);
// Make the service request
ResEmployee := Service.echoMyEmployee(ReqEmployee);
try
// Display the response
edtResFirstName.Text := ResEmployee.FirstName;
edtResLastName.Text := ResEmployee.LastName;
spedResSalary.Value := Trunc(ResEmployee.Salary);
finally
ResEmployee.Free;
end;
finally
ReqEmployee.Free;
end;
end;


Nun kommt eine andere Fehlermeldung:
Dokumentelement
http//: schemas.xmlsoap.org/soap/envelope/Envelope erwartet, http//:schemas.xmlsoap.org/wsdl/:definitions gefunden
:shock: also ich bin schonmal froh das sich die fehlermeldung geändert hat. :D

ChrisE 24. Nov 2016 12:17

AW: Delphi: SOAP zwischen 2 Rechnern
 
Zitat:

Zitat von derseitzer (Beitrag 1354596)
Delphi-Quellcode:
Service := unitIMyService.GetIMyService(system.False,'http://192.168.0.1:8080/wsdl/IMyService',nil);    // hier die ip vom rechner mit server eingetragen
...
http//: schemas.xmlsoap.org/soap/envelope/Envelope erwartet, http//:schemas.xmlsoap.org/wsdl/:definitions gefunden

Du übergibst eine WSDL-Adresse und forderst im ersten Parameter der METHODE SOAP. Das sagt die Fehlermeldung. Entscheide Dich ;-)

Gruß, Chris

derseitzer 24. Nov 2016 12:30

AW: Delphi: SOAP zwischen 2 Rechnern
 
Also erstmal 1000Dank Chris :-D , gibt es einen Unterschied welches ich verwenden soll oder sind das einfach nur 2 verschiedene Pfadmöglichkeiten :?
also funktionieren tut es jetzt.. super:) dann werde ich jetzt probieren eine Funktion zu schreiben mit der ich vom einen auf den anderen PC Client schreiben kann
werde mich sicherlich nochmal melden, weil des werde ich sicherlich au nicht sofort hinbekommen :lol: aber danke erstmal :-D

derseitzer 24. Nov 2016 12:49

AW: Delphi: SOAP zwischen 2 Rechnern
 
Ok wenn ich nun einen zweiten Rechner habe von dem ich die Information vom 1. Rechner bekommen möchte, muss ich ja nun eine neue Funktion schreiben.
und zwar in Rechner 1 und 2 richtig? speichert mein Server die Information irgendwo ab, wenn ich ein Echo mache vom Rechner 1 aus?..ich glaube nicht..
heißt das nun ich sollte auf Rechner 2 einen Timer stellen der alle paar Millisekunden schaut ob eine Information angekommt? :?
Bestimmt nicht, der Server muss doch die Information die Rechner1 schickt irgendwo speichern


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:30 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf