AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi: SOAP zwischen 2 Rechnern

Delphi: SOAP zwischen 2 Rechnern

Ein Thema von derseitzer · begonnen am 24. Nov 2016 · letzter Beitrag vom 5. Dez 2016
Antwort Antwort
Seite 1 von 2  1 2   
derseitzer

Registriert seit: 12. Okt 2016
227 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 07:51
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
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
1.528 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 09:01
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
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
227 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 09:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
497 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 09:26
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
227 Beiträge
 
Delphi 10 Seattle Professional
 
#5

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 09:59
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...
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
497 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 10:48
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;
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
227 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 11:12
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
also ich bin schonmal froh das sich die fehlermeldung geändert hat.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
497 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 11:17
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
227 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 11:30
Also erstmal 1000Dank Chris , 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 aber danke erstmal
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
227 Beiträge
 
Delphi 10 Seattle Professional
 
#10

AW: Delphi: SOAP zwischen 2 Rechnern

  Alt 24. Nov 2016, 11:49
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf