Home >Backend Development >PHP Tutorial >webserver two modes

webserver two modes

WBOY
WBOYOriginal
2016-08-08 09:20:58850browse
PHP 使用soap有两种方式。

一、用wsdl文件

服务器端。

<?php
class service
{
  public function HelloWorld()
   {
      return  "Hello";
   }
  public  function Add($a,$b)
   {
      return $a+$b;
   }
}
$server=new SoapServer(&#39;soap.wsdl&#39;,array(&#39;soap_version&#39; => SOAP_1_2));
$server->setClass("service");
$server->handle();
?>
资源描述文件,可以用工具(zend studio)生成。其实就是一个xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/interface/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="soap" targetNamespace="http://localhost/interface/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://localhost/interface/">
      <xsd:element name="HelloWorld">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="in" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="HelloWorldResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="out" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="Add">
      	<xsd:complexType>
      		<xsd:sequence>
      			<xsd:element name="in" type="xsd:int"></xsd:element>
      		</xsd:sequence>
      	</xsd:complexType>
      </xsd:element>
      <xsd:element name="AddResponse">
      	<xsd:complexType>
      		<xsd:sequence>

      			<xsd:element name="out" type="xsd:int"></xsd:element>
      		</xsd:sequence>
      	</xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
   <wsdl:message name="AddRequest">   	<wsdl:part name="a" type="xsd:int"></wsdl:part>
  	<wsdl:part name="b" type="xsd:int"></wsdl:part>
  </wsdl:message>
  <wsdl:message name="AddResponse">
  	<wsdl:part name="c" type="xsd:int"></wsdl:part>
  </wsdl:message>
  <wsdl:portType name="TestSoap">     <wsdl:operation name="Add">
    	<wsdl:input message="tns:AddRequest"></wsdl:input>
    	<wsdl:output message="tns:AddResponse"></wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="soapSOAP" type="tns:TestSoap">
  	<soap:binding style="document"
  		transport="http://schemas.xmlsoap.org/soap/http" />
  	<wsdl:operation name="Add">
  		<soap:operation soapAction="http://localhost/interface/Add" />
  		<wsdl:input>
  			<soap:body use="literal"
  				namespace="http://localhost/interface/" />
  		</wsdl:input>
  		<wsdl:output>
  			<soap:body use="literal"
  				namespace="http://localhost/interface/" />
  		</wsdl:output>
  	</wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="TestSoap">
    <wsdl:port binding="tns:soapSOAP" name="soapSOAP">
      <soap:address location="http://localhost/interface/myservice.php"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
客户端调用
<?php
$soap = new SoapClient(&#39;http://localhost/interface/soap.wsdl&#39;);
echo $soap->Add(1,2);
?>
二、不用wsdl文件

服务器端

<?php
class service
{
  public function HelloWorld()
   {
      return  "Hello";
   }
  public  function Add($a,$b)
   {
      return $a+$b;
   }
}
$server=new SoapServer(null,array(&#39;uri&#39; => "abcd"));
$server->setClass("service");
$server->handle();
?>
客户端
<?php
try{
	$soap = new SoapClient(null,array(
			"location" => "http://localhost/interface/soap.php",
			"uri"      => "abcd",  //资源描述符服务器和客户端必须对应
			"style"    => SOAP_RPC,
			"use"      => SOAP_ENCODED
			   ));

	echo $soap->Add(1,2);
}catch(Exction $e){
	echo print_r($e->getMessage(),true);
}
?>

Copyright Statement: This article is an original article by the blogger and may not be reproduced without the blogger's permission.

The above introduces the two modes of webserver, including the content. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn