AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Webservice und Webservice-Client (SOAP)
Thema durchsuchen
Ansicht
Themen-Optionen

Webservice und Webservice-Client (SOAP)

Ein Thema von hyype · begonnen am 27. Nov 2008 · letzter Beitrag vom 1. Dez 2008
Antwort Antwort
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#1

Webservice und Webservice-Client (SOAP)

  Alt 27. Nov 2008, 15:27
Hallo Community!
Ich habe mir mit Hilfe geigneter Tutorials einen Webservice (SOAP-Server-Anwendung) und einen Webservice-Client (normale VCL-win32-Anwendung mit WSDL-Import) erstellt. Die WSDL-Datei scheint ja ein Überträger der in der SOAP-Server-Anwendung definierten Klassen und Prozeduren zu sein, was schonmal verdammt cool ist!
Ich habe aber einige (Beginner-)Fragen dazu:

1.) Wie kann ich nun zwischen Server und Client kommunizieren?

1.1.) Wie kann ich Dateien zwischen Server und Client hin und her schicken? Brauch ich dazu zusätzliche Komponenten wie beispielsweise idTCPClient und idTCPServer oder geht das schon so?

2.) Wie kann ich den WSDL-Import automatisieren? Dass ich irgendwie die URL oder den Pfad angebe und sie über Quellcode importiere.

3.) Wo finde ich geeignete Tutorials zum Thema? Also solche, die ein wenig über die blose Generierung eines Webservice(-Clients) hinausgehen.

4.) Hat das Steuerelement SOAPConnection mit der Thematik zu tun und wenn ja, was? Die wurde in dem Tutorial, dass ich gelesen habe, weder erwähnt noch verwendet.

Vielen Dank!

mfg

Frank
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Webservice und Webservice-Client (SOAP)

  Alt 27. Nov 2008, 17:26
Ich habe soeben mal versucht, den Client woanders laufen zu lassen, da meckert er rum, dass er die .WSDL-Datei nicht findet.
Wieso braucht er die denn noch, nachdem ich die importiert habe und mir somit alle Funktionen und Prozeduren des Servers zur Verfügung stehen??
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Webservice und Webservice-Client (SOAP)

  Alt 28. Nov 2008, 10:58
Ich habe jetzt folgenden Code in eine onButtonClick-Procedure geschrieben:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  muhrio:THTTPRio;
  muhrr:THTTPReqResp;
  ms:TMemoryStream;
begin
  ms:=TMemoryStream.Create;
  ms.LoadFromFile('H:\Archiv\Src\blub.doc');
  muhrio:=THTTPRio.Create(nil);
  muhrio.wsdllocation:='C:\Users\tmsschac\Desktop\ITestService.wsdl';
  muhrr:=THTTPReqResp.Create(nil);
  muhrio.HTTPWebNode:=muhrr;
  muhrr.URL:='http://localhost:8081/Project1.MyClass';
// muhrr.UserName:='';
// muhrr.Password:='';
  muhrr.Connect(true);
  muhrr.Send(ms);
// muhrr.receive(int, stream, boolean);
  muhrr.Connect(false);
end;
Die auskommentierten Zeilen sind dabei z.z. noch nicht relevant.
Das ReqResp-Objekt bietet die Möglichkeit, Streams zu senden. Der Sinn ist glaube ich, dass man Username und Password und nen Request sendet, damit man sich einloggen und die vom Server bereitgestellten Funktionen benutzen kann und der Server schickt dann ein Response.
Ich will hingegen eine Datei in dem Stream schicken, die der Server dann irgendwo abspeichern soll. Ich habe bisher leider keine andere Möglichkeit gefunden, überhaupt einen Stream zum Server zu schicken, daher versuche ich das nun auf diese Weise in der Hoffnung, dass es möglich ist.
Wenn ich auf den Button drauf klicke, läuft er den code auch durch, ohne einen Fehler zu bringen, d.h. mein Stream mit der Datei drin kommt beim Server an. Nun meine Frage dazu: Wo kommt der Stream an? ^^
Ich weiß, dass ich auf dem Server Funktionen, Prozeduren, Klassen etc definieren kann, die dem Client dann über die WSDL-Datei zur Verfügung gestellt werden. Aber ich habe keine Ahnung, wo genau mein Stream ankommt und ich eine Prozedur schreiben kann, die diesen dann verarbeitet. Ich hoffe, dass das nicht irgendwo automatisch passiert und ich keine Möglichkeit habe, dieses Vorgehen zu verändern...
P.S.:
Ich weiß, dass dies ein sehr spezielles Themengebiet ist, ich habe auch schon viele Threads gefunden, wo niemals jemand geantwortet hat, aber kennt sich nicht doch der ein oder andere zumindest ein klein wenig aus? Pseudo-Wissen oder Vermutungen sind immernoch besser als gar keine Idee...

edit:
Ich habe es jetzt mal ganz trivial versucht, indem ich eine function geschrieben habe, die als übergabeparameter einen TMemoryStream hat. In diesen Stream lad ich ich die Datei rein und wollt sie auf der Serverseite wieder als Datei speichern.
Beim Import der wsdl meckert er aber rum:
Fehlender <definition>-Knoten von Namespace "http://schemas.xmlsoap.org/wsdl/"
Hat irgendwer irgendne Idee?
Ich nehme an, er kennt kein TMemoryStream. Ich hab aber bei Uses Classes angegeben, da is TMemoryStream ja drin... Kennt XML evtl kein TMemoryStream? Mit XML kenn ich mich ncih so gut aus...
  Mit Zitat antworten Zitat
hyype

Registriert seit: 5. Nov 2008
97 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Webservice und Webservice-Client (SOAP)

  Alt 1. Dez 2008, 16:18
Ich bin mal so frei, die "Lösung" hier zum Besten zu geben:
Und zwar kann man mit SOAP nur strukturierte Daten senden, Binärdaten nicht.
D.h. nachdem man die Datei in einen Stream geladen hat, kann man diesen nicht direkt verschicken, sondern muss ihn zunächst in einen Base64String umwandeln. Dieser String kann dann als Übergabeparameter für eine auf dem Server deklarierte (und über wsdl-Datei dem Client zur Verfügung gestellte) function/procedure übergeben werden. Da diese function/procedure auf dem Server ausgeführt wird, kann man dort eine TMemoryString-Variable einführen (das geht nämlich, nur als Übergabeparameter geht es nicht) und unter Verwendung anderer Funktionen den Base64String umwandeln und den MemoryStream schließlich als Datei abspeichern.
Delphi-Quellcode:
procedure TTestService.FileReceiver(s:string); stdcall;
var
  ms:TMemoryStream;
begin
  ms:=TMemoryStream.Create;
  ms:=Base64toStream(s);
  ms.SaveToFile(..);
end;
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 21:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz