soap_client.php
<?php
$client = new SoapClient('http://www.phptest.com/soap/soap_server.php?WSDL');
//$client = new SoapClient('http://localhost/php/soap/math.wsdl');
try {
$result = $client->div(10, 2); // will cause a Soap Fault if divide by zero
print "The answer is: $result";
} catch(SoapFault $e) {
print "Sorry an error was caught executing your request: {$e->getMessage()}";
}
?>
soap_server.php
<?php
class math {
public function add($a, $b) {
return $a + $b;
}
public function div($a, $b) {
if($b == 0) {
throw new SoapFault(-1, "Cannot divide by zero!");
}
return $a / $b;
}
}
$server = new SoapServer('math.wsdl', array('soap_version' => SOAP_1_2));
$server->setClass("math");
$server->handle();
?>
math.wsdl (可以通过zend studio生成)
<?xml version='1.0' encoding='UTF-8'?> <!-- WSDL file generated by Zend Studio. --> <definitions name="math" targetNamespace="urn:math" xmlns:typens="urn:math" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="add"> <part name="a" type="xsd:integer"/> <part name="b" type="xsd:integer"/> </message> <message name="addResponse"> <part name="addReturn" type="xsd:integer"/> </message> <message name="div"> <part name="a" type="xsd:integer"/> <part name="b" type="xsd:integer"/> </message> <message name="divResponse"> <part name="divReturn" type="xsd:double"/> </message> <portType name="mathPortType"> <documentation> A simple math utility class </documentation> <operation name="add"> <documentation> Add two integers together </documentation> <input message="typens:add"/> <output message="typens:addResponse"/> </operation> <operation name="div"> <documentation> Div two integers from each other </documentation> <input message="typens:div"/> <output message="typens:divResponse"/> </operation> </portType> <binding name="mathBinding" type="typens:mathPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="add"> <soap:operation soapAction="urn:mathAction"/> <input> <soap:body namespace="urn:math" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:math" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> <operation name="div"> <soap:operation soapAction="urn:mathAction"/> <input> <soap:body namespace="urn:math" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:math" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="mathService"> <port name="mathPort" binding="typens:mathBinding"> <soap:address location="http://www.phptest.com/soap/soap_server.php"/> </port> </service> </definitions>