欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

SOAP简单例子

程序员文章站 2022-05-16 21:34:17
...
  
<?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代码  
<?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代码  
<?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>