PHP-SOAP-Client und-Server
Ich bin versucht zu schreiben, dass meine erste SOAP-server, nachdem Sie es getan hat ein wenig mit SOAP-clients.
Wenn ich versuchte, mit einer Zusendung einer einzigen saite, das funktionierte gut. Aber wenn man versucht zu senden mehrerer Parameter an den server komme ich mit Köpfchen fahren. Gibt es eine bessere Methode für die Bekämpfung dieser?
Server:
<?php
if(!extension_loaded("soap")){
dl("php_soap.dll");
}
ini_set("soap.wsdl_cache_enabled","0");
function getCatalogEntry($array){
$conn = mysqli_connect($host,$user,$password,$db) or die(mysqli_error($conn));
$sql = "SELECT '" . $array[0]. "' FROM soap WHERE id = '".$array[1]."'";
$result = $conn->query($sql) or die(mysqli_error($conn));
$row = mysqli_fetch_array($result);
return var_dump($array).$array[0];//$sql.$row[$field];
}
$server = new SoapServer("test.wsdl");
$server->AddFunction("getCatalogEntry");
$server->handle();
?>
Client:
<?php
try{
$sClient = new SoapClient('server.php?wsdl');
$params = array(
"field" => "field2",
"id" => "id");
$response = $sClient->getCatalogEntry($params);
var_dump($response);
} catch(SoapFault $e){
var_dump($e);
}
?>
WSDL:
<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='Catalog'
targetNamespace='http://example.org/catalog'
xmlns:tns=' http://example.org/catalog '
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/'>
<xsd:complexType name="KeyValueData">
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="id" type="string"/>
<xsd:element minOccurs="1" maxOccurs="1" name="field" type="string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ArrayOfKeyValueData">
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded"
name="keyval" type="tns:KeyValueData"/>
</xsd:sequence>
</xsd:complexType>
<message name='getCatalogRequest'>
<part name='catalogId' type='ArrayOfKeyValueData'/>
</message>
<message name='getCatalogResponse'>
<part name='Result' type='xsd:string'/>
</message>
<portType name='CatalogPortType'>
<operation name='getCatalogEntry'>
<input message='tns:getCatalogRequest'/>
<output message='tns:getCatalogResponse'/>
</operation>
</portType>
<binding name='CatalogBinding' type='tns:CatalogPortType'>
<soap:binding style='rpc'
transport='http://schemas.xmlsoap.org/soap/http'
/>
<operation name='getCatalogEntry'>
<soap:operation soapAction='urn:localhost-catalog#
getCatalogEntry'/>
<input>
<soap:body use='encoded' namespace=
'urn:localhost-catalog'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</input>
<output>
<soap:body use='encoded' namespace=
'urn:localhost-catalog'
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' />
</output>
</operation>
</binding>
<service name='CatalogService'>
<port name='CatalogPort' binding=
'CatalogBinding'>
<soap:address location='server.php'/>
</port>
</service>
</definitions>
Was ist Ihr output? Es gibt zwei var_dumps also, was sind Sie Eingang?
Von diesem bekomme ich
Sie sollten verwenden Sie eine vorbereitete Anweisung (php.net/manual/en/mysqli.prepare.php) anstelle von verketten von teilen der Anfrage mit raw-SQL.
Von diesem bekomme ich
string(1) "A"
ich glaube nicht, dass das var_dump in die server-Funktion ist die Ausgabe etwasSie sollten verwenden Sie eine vorbereitete Anweisung (php.net/manual/en/mysqli.prepare.php) anstelle von verketten von teilen der Anfrage mit raw-SQL.
InformationsquelleAutor Chris Crawshaw | 2012-12-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich sehe Ihr problem, das Sie zurückgeben
var_dump()
aber var_dump hat keinen Rückgabewert.Verwenden
var_export()
statt. Werfen Sie einen Blick auf das Handbuch.Also in deinem code das Aussehen wird:
string(7) "'Array'"
Die macht mich denken, dass es ein problem mit meinen Erklärungen in der wsdlSie könnten versuchen, die WSDL-Generierung automatisch mit einem Rahmen oder sowas Beispiel:code.google.com/p/php-wsdl-creator
InformationsquelleAutor RTB