php 使用zendstudio 生成webservice文件 wsdl

首先新建一个项目

在项目中新建下面这些文件

php类文件 test.php

<?php
class test {
    public function __construct()
    {
    }
    public function add($name,$age)
    {
        $result = array('REV'=>false);
        $result['REV'] = true;
        $result['DATA'] = 1;
        $result = json_encode($result);
        return $result;
    }
    public function del($id)
    {
        $result = false;
        return $result;
    }
    public function getlist($type)
    {
        $result = array(
            array('name'=>'张三','age'=>18),
            array('name'=>'李四','age'=>20),
            array('name'=>'jms','age'=>10),
            array('name'=>'jk陈','age'=>8),
        );
        $result = json_encode($result);
        return $result;
    }
}

?>

使用zendstudio生成wsdl文件

 

 

生成的文件格式如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://localhost/t/ws" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="test_server" targetNamespace="http://localhost/t/ws">
  <wsdl:types>
    <xsd:schema targetNamespace="http://localhost/t/ws">
      <xsd:element name="getlist">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="in" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="getlistResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="out" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="getlistRequest">
    <wsdl:part name="type" type="xsd:int"/>
  </wsdl:message>
  <wsdl:message name="getlistResponse">
    <wsdl:part name="resultRespose" type="xsd:string"/>
  </wsdl:message>
  <wsdl:portType name="test_server">
    <wsdl:operation name="getlist">
      <wsdl:input message="tns:getlistRequest"/>
      <wsdl:output message="tns:getlistResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="test_serverSOAP" type="tns:test_server">
      <soap:binding style="document"
          transport="http://schemas.xmlsoap.org/soap/http" />
      <wsdl:operation name="getlist">
          <soap:operation
              soapAction="http://localhost/t/ws/NewOperation" />
          <wsdl:input>
              <soap:body use="literal" />
          </wsdl:input>
          <wsdl:output>
              <soap:body use="literal" />
          </wsdl:output>
      </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="test_server">
    <wsdl:port binding="tns:test_serverSOAP" name="test_serverSOAP">
      <soap:address location="http://localhost/t/ws/server.php"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

 

调用server的文件 server.php

<?php
ini_set("soap.wsdl_cache_enabled", "0");  //测试时打开防止soap缓存
include("test.php");
$Server=new SoapServer('test_server.wsdl');   //SoapServer
$Server->setClass("test");
$Server->handle();
?>

 

 

测试调用webserver wsdl的文件

<?php
ini_set("soap.wsdl_cache_enabled", "0");
//$url = 'http://localhost/t/ws/test_server.wsdl';
$url = 'http://localhost/t/ws/server.php?wsdl';    //两种url都可以
$client = new SoapClient($url);
$params = array('type'=>1);
$res = $client->__soapCall('getlist',array('parameters'=>$params));
var_dump($res);
?>

返回数据:

string(119) "[{"name":"\u5f20\u4e09","age":18},{"name":"\u674e\u56db","age":20},{"name":"jms","age":10},{"name":"jk\u9648","age":8}]" 

调用成功

 

posted @ 2014-09-28 18:46  jerry-Tom  阅读(5020)  评论(0编辑  收藏  举报