![]() |
WSDL import für eigenen SOAP Webservice
Hallo Community,
ich bräuchte einmal eure Hilfe. Ich möchte auf eine im Internet liegende mySQL Datenbank zugreifen, bzw. die USer meines Programmes. Da ich mySQL allerdings per Benutzerrechte nicht so öffnen möchte, dass man von überall darauf zugreifen kann, erstelle ich mir einen eigenen SOAP Webservice und werde darüber hoffentlich höhere Sicherheit gewähren können. Das ist abe rnicht mein Problem. Ich habe folgendes Tutorial durchgearbeitet ![]() Habe nun folgende .wsdl Datei
XML-Code:
Wenn ich diese nun in Delphi2005 mit dem WSDL import importiere bekomme ich folgende .pas
<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='TestServer' xmlns:tns=' [url]http://localhost/webservice-1/testserver.wsdl[/url] ' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' xmlns='http://schemas.xmlsoap.org/wsdl/'> <message name='addiereAnfrage'> <part name='sum1' type='xsd:float'/> <part name='sum2' type='xsd:float'/> </message> <message name='addiereAntwort'> <part name='Result' type='xsd:float'/> </message> <portType name='TestServerPortType'> <operation name='addiere'> <input message='tns:addiereAnfrage'/> <output message='tns:addiereAnwort'/> </operation> </portType> <binding name='TestServerBinding' type='tns:TestServerPortType'> <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/> <operation name='addiere'> <soap:operation soapAction='urn:xmethodsTestServer#addiere'/> <input> <soap:body use='encoded' namespace='urn:xmethodsTestServer' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </input> <output> <soap:body use='encoded' namespace='urn:xmethodsTestServer' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> </output> </operation> </binding> <service name='TestServerService'> <port name='TestServerPort' binding='TestServerBinding'> <soap:address location='http://localhost/webservice-1/server.php'/> </port> </service> </definitions>
Delphi-Quellcode:
Das speichere ich unter testserver.pas ab.
unit testserver;
interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; type // ************************************************************************ // // ************************************************************************ // TestServerPortType = interface(IInvokable) ['{1DCF25F4-1B2B-644F-D94A-06D806B14D33}'] procedure addiere; stdcall; end; implementation initialization InvRegistry.RegisterInterface(TypeInfo(TestServerPortType), '', 'UTF-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(TestServerPortType), ''); end. Nun nehme ich mein leeres Projekt und füge "testserver" zu USES hinzu, natürlich liegt testserver.pas im selben Verzeichnis. Doch wie kann ich nun auf meinen Webservice zugreifen ? Leider fehlt mir noch die Erfahrung mit Webservices aber ich hoffe ihr könnt mir helfen und ich habe alles wichtige genannt. Bin für jeden Tipp, Link und jedes Beispielt dankbar. MfG Primusio |
Re: WSDL import für eigenen SOAP Webservice
Basiert zwar auf Delphi 6, aber sollte bei D2K5 ähnlich funktionieren.
![]() ![]() |
Re: WSDL import für eigenen SOAP Webservice
Erst einmal vielen dank für die Links, jetzt weiß ich in etwa wie es funktionieren SOLLTE.
Allerdings glaube ich das bei dem Import etwas nicht richtig läuft, wenn ich mit die importierte .pas Datei ansehe
Delphi-Quellcode:
sind hier keinerlei Variablen deklariert. Dabei sind 2 Zahlen als Input und eine als Output in der WSDL Datei angegeben.
unit testserver;
interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; type TestServerPortType = interface(IInvokable) ['{1DCF25F4-1B2B-644F-D94A-06D806B14D33}'] procedure addiere; stdcall; end; implementation initialization InvRegistry.RegisterInterface(TypeInfo(TestServerPortType), '', 'UTF-8'); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(TestServerPortType), ''); end. Aus dem Grund komme ich hier nicht weiter. Bin für weitere Tipps sehr sehr dankbar und vielleicht bin ich auch nur zu blöd dafür aber irgendwie muss es ja funktionieren, tut es ja auch bei anderen. MfG Primusio |
Re: WSDL import für eigenen SOAP Webservice
Also, zunächst ist das offensichtlich kein Problem von Delphi 2005. In Delphi 7 bekomme ich dasselbe Ergebnis. Stellt sich die Frage, wo ist die WSDL-Datei her? Ich vermisse z.B. vor message bzw. part die Zeichen wsdl: Edit: Sehe gerade, die müssen nicht unbedingt sein. Kommt mir aber trotzdem recht kurz und unvollständig vor.
2. Edit: Habe mir mal andere WSDL's angeschaut, da stehen " und keine ' |
Re: WSDL import für eigenen SOAP Webservice
Ich habe mich exakt an das Tutorial gehalten (Link oben), habe die .php Datei exakt übernommen und die .wsdl Datei, wo ich nur etwa 2 Zeilen anpassen muss. Und zwar der Pfad zur .wsdl und zur .php Datei.
Du sagst die .pas Datei sieht so richtig aus ? Also müssen nicht immer die Variablen für die Funktion deklariert werden ? |
Re: WSDL import für eigenen SOAP Webservice
Ich würde eher sagen, die WSDL-Datei ist verkehrt (siehe mein 2. Edit). Warum erstellst Du keinen WebSevice mit Delphi 2005, dann bekommst Du korrekte WSDL's!
|
Re: WSDL import für eigenen SOAP Webservice
Nochmal danke das du dir die Zeit für meinen Thread nimmst, hier einmal die neue .wsdl Datei8
XML-Code:
Also jetzt mit " und wsdl davor aber es entsteht die selbe .pas Datei. Vielleicht bin ich auch zu dämlich mit dieser .pas Datei die Verbindung und die Procedure aufzurufen.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="TestServer" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns=" [url]http://localhost/webservice-1/testserver.wsdl[/url] " xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="nullTestServer.xsd1"> <wsdl:types> </wsdl:types> <wsdl:message name="addiereAntwort"> <wsdl:part name="Result" type="xsd:float"/> </wsdl:message> <wsdl:message name="addiereAnfrage"> <wsdl:part name="sum1" type="xsd:float"/> <wsdl:part name="sum2" type="xsd:float"/> </wsdl:message> <wsdl:portType name="TestServerPortType"> <wsdl:operation name="addiere"> <wsdl:input message="tns:addiereAnfrage"/> <wsdl:output message="tns:addiereAnwort"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="TestServerBinding" type="tns:TestServerPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="addiere"> <soap:operation soapAction="urn:xmethodsTestServer#addiere"/> <wsdl:input> <soap:body parts="sum1 sum2" use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="TestServerService"> <wsdl:port binding="wsdl:TestServerBinding" name="TestServerPort"> <soap:address location="http://localhost/webservice-1/server.php"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Der SOAP Server soll unter PHP laufen, da ich mich mit php weit besser auskenne und er auf jeden Apache mit php5 läuft, kein Problem mit CGI Verzeichnis ... und man kann die Dateien schneller bearbeiten. |
Re: WSDL import für eigenen SOAP Webservice
Liste der Anhänge anzeigen (Anzahl: 1)
Also ich habe noch nie ein WSDL selbst zusammenbauen müssen, deswegen weiß ich auch nicht, was da unbedingt rein muß. Das hat mir Delphi bzw. ASP.Net immer automatisch zur Laufzeit erstellt! Ich hänge Dir aber mal eine WSDL als Anhang dran, da kannst Du Dir das mal ansehen und mit Deiner vergleichen. Und auch wenn Du PHP besser kannst. Verusche mal mit D2K5 einen Webservice mit genau dieser Funktion zu erstellen und schau Dir mal die dazu generierte(!) WSDL dazu an. Ich komme leider frühestens am Freitag dazu, das mal selbst zu machen.
|
Re: WSDL import für eigenen SOAP Webservice
Liste der Anhänge anzeigen (Anzahl: 1)
Hier kommt eine WSDL mit einer Web-Methode Addiere, generiert durch einen mit D2K5 erstellten WebService. Und damit wird auch ein "richtiges" Interface erstellt.
|
Re: WSDL import für eigenen SOAP Webservice
Ich bedanke mich nochmal für die Mühe die du dir mit mir gibst.
Ich habe mal deine WSDL Datei importiert und den Pfad zu meinen Script angegeben aber leider weiß ich noch nicht, wie ich nun auf diese Function bzw. den SOAP Service zugreifen kann. Ich habe die erstellte .pas Datei bei USES hinzugefügt, doch von da an komm eich nicht ganz weiter und der von dir oben gepostete Link hilft mir leider nicht so sehr, da es nach der Anleitung nicht fuktioniert. Kannst du mir vielleicht kurz sagen welche Kombo und welche Codezeilen ich jetzt noch brauche ? Wäre wirklich zu gütig von dir. Danke und MfG Primusio |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz