@all
Ich möchte voarausschicken, das meine PHP Kentnisse im Gegensatz zu meinen Delphi Kenntnissen weit zurückstehen und wahrscheinlich aus diesem Grunde meine Schwierigkeiten resultieren.
Zum Problem:
Ich möchte einen PHP-Webservice erstellen und mit einem Delphi-Client ansprechen.
Zu diesem Zweck habe ich eine WSDL-Datei generiert (erledigt Delphi automatisch) einen Webservice sowie einen Client in Delphi geschrieben und die Funktion überprüft.
Dann habe ich die Umsetzung als PHP-Webservice in Angriff genommen, aber leider erhalte ich nur folgenden Response:
Der Request der an den Service gerichtet ist:
Die zugehörige WSDL-Datei:
Die Delphi Typendeclaration des complexen Datentyps (automatisch generiert):
Der PHP-Webservice:
Bei einfachen Datentypen wie Strings, Integer oder ähnliches funktioniert alles einwandfrei. Das Problem liegt meiner Vermutung nach im Complexen Datentyp.
Schon einmal ein herzliches Dankeschön vorab für eure Hilfe.
Highway
Ich möchte voarausschicken, das meine PHP Kentnisse im Gegensatz zu meinen Delphi Kenntnissen weit zurückstehen und wahrscheinlich aus diesem Grunde meine Schwierigkeiten resultieren.
Zum Problem:
Ich möchte einen PHP-Webservice erstellen und mit einem Delphi-Client ansprechen.
Zu diesem Zweck habe ich eine WSDL-Datei generiert (erledigt Delphi automatisch) einen Webservice sowie einen Client in Delphi geschrieben und die Funktion überprüft.
Dann habe ich die Umsetzung als PHP-Webservice in Angriff genommen, aber leider erhalte ich nur folgenden Response:
Code:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Client</faultcode><faultstring>looks like we got "Body" with several functions call</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
Code:
Soap-Method: Signup <?xml version="1.0"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="urn:FloSrvIntf"><NS1:Signup xmlns:NS1="urn:FloSrvIntf-IFloSrv"><SignupData href="#1"/></NS1:Signup><NS2:TSignupData id="1"><Username>Test</Username><Password>NoPassword</Password></NS2:TSignupData></SOAP-ENV:Body></SOAP-ENV:Envelope>
Code:
<?xml version="1.0" encoding="utf-8"?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IFloSrvservice" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns1="urn:FloSrvIntf"> <types> <xs:schema targetNamespace="urn:FloSrvIntf" xmlns="urn:FloSrvIntf"> <xs:complexType name="TSignupData"> <xs:sequence> <xs:element name="Username" type="xs:string"/> <xs:element name="Password" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> </types> <message name="Signup0Request"> <part name="SignupData" type="ns1:TSignupData"/> </message> <message name="Signup0Response"> <part name="return" type="xs:boolean"/> </message> <portType name="IFloSrv"> <operation name="Signup"> <input message="tns:Signup0Request"/> <output message="tns:Signup0Response"/> </operation> </portType> <binding name="IFloSrvbinding" type="tns:IFloSrv"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="Signup"> <soap:operation soapAction="urn:FloSrvIntf-IFloSrv#Signup" style="rpc"/> <input message="tns:Signup0Request"> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:FloSrvIntf-IFloSrv"/> </input> <output message="tns:Signup0Response"> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:FloSrvIntf-IFloSrv"/> </output> </operation> </binding> <service name="IFloSrvservice"> <port name="IFloSrvPort" binding="tns:IFloSrvbinding"> <soap:address location="http://localhost/flo/TestServer.php"/> </port> </service> </definitions>
Code:
// ************************************************************************ // // Namespace : urn:FloSrvIntf // ************************************************************************ // TSignupData = class(TRemotable) private FUsername: WideString; FPassword: WideString; published property Username: WideString read FUsername write FUsername; property Password: WideString read FPassword write FPassword; end;
Der PHP-Webservice:
Code:
<?php $Wsdl = 'http://localhost/flo/FloSrv.wsdl'; $Signup = array("Username" => "", "Password" => ""); function Signup($Signup) { if ($Signup["Username"] == "ValidatedName") { Return True; } else { Return False; } } ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache $server = new SoapServer($Wsdl); $server->addFunction("Signup"); $server->handle(); ?>
Schon einmal ein herzliches Dankeschön vorab für eure Hilfe.
Highway
Kommentar