zf 1.9.6 zend_soap:函数(“doString”)不是此服务的有效方法

时间:2009-12-15 13:11:21

标签: php zend-framework soap zend-soap

重复this question

我正在尝试使用zend framework 1.9.6和php 5.3.1来使用Zend_Soap。

soap.php(wsdl generator)

<?php
   require_once('Zend/Soap/Server.php');
   require_once('Zend/Soap/AutoDiscover.php');
   require_once('Soaping.php');
   $_WSDL_URI="http://server/soap/soap.php?wsdl";

    if(isset($_GET['wsdl'])) {
            hadleWSDL();
        } else {
            handleSOAP();
        }
  function hadleWSDL() {
        $autodiscover = new Zend_Soap_AutoDiscover();
        $autodiscover->setClass('Soaping');
        $autodiscover->handle();
    }

     function handleSOAP() {
     global $_WSDL_URI;
        $soap = new Zend_Soap_Server($_WSDL_URI); 
       $soap->setClass('Soaping');
        $soap->handle();
    }

Soaping.php(网络服务类)

<?php
class Soaping {

   /**
    *
    * @param string $str
    * @return string 
    */
    function doString($str) {
        return $str;
    }

}

client.php - 客户端

<?php
   require_once('Zend/Soap/Client.php');
   $_WSDL_URI="http://server/soap/soap.php?wsdl";
       $client = new Zend_Soap_Client($_WSDL_URI);
       $client->doString('aaa');

当我执行client.php文件时,我收到错误: Fatal error: Uncaught SoapFault exception: [Sender] Function ("do_math") is not a valid method for this service in /usr/local/ZendFramework-1.9.6/library/Zend/Soap/Client.php:1090 Stack trace: #0 /usr/local/ZendFramework-1.9.6/library/Zend/Soap/Client.php(1090): SoapClient->__soapCall('do_math', Array, NULL, NULL, Array) #1 [internal function]: Zend_Soap_Client->__call('do_math', Array) #2 /home/ufk/Projects/xpogames-development/xpo/soap/client.php(6): Zend_Soap_Client->do_math(1, 1) #3 {main} thrown in /usr/local/ZendFramework-1.9.6/library/Zend/Soap/Client.php on line 1090

通过以下链接http://server/soap/soap.php?wsdl

创建的xml

<?xml version="1.0"?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xpogames/soap/soap.php" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="Soaping" targetNamespace="http://xpogames/soap/soap.php"><types><xsd:schema targetNamespace="http://xpogames/soap/soap.php"/></types><portType name="SoapingPort"><operation name="doString"><documentation>do string</documentation><input message="tns:doStringIn"/><output message="tns:doStringOut"/></operation></portType><binding name="SoapingBinding" type="tns:SoapingPort"><soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/><operation name="doString"><soap:operation soapAction="http://xpogames/soap/soap.php#doString"/><input><soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xpogames/soap/soap.php"/></input><output><soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://xpogames/soap/soap.php"/></output></operation></binding><service name="SoapingService"><port name="SoapingPort" binding="tns:SoapingBinding"><soap:address location="http://xpogames/soap/soap.php"/></port></service><message name="doStringIn"><part name="str" type="xsd:string"/></message><message name="doStringOut"><part name="return" type="xsd:string"/></message></definitions>

我看到xml中存在该函数,为什么我不能使用它?

更新

如果我在课堂上添加以下功能:
          / **
           *添加方法
           *
           * @param Int $ param1
           * @param Int $ param2
           * @return Int
           * /
         public function math_add($ param1,$ param2){
             return $ param1 + $ param2;
         }

这个功能得到认可。但即使我将其更改为add_math2(),该函数也不会再次被识别。

2 个答案:

答案 0 :(得分:4)

好吧,似乎我在第一次创建wsdl文件时缓存了php并且没有重新创建它。

可以通过php指令soap.wsdl_cache_enabled = 0

禁用soap缓存

答案 1 :(得分:0)

您应该仅为函数添加注释,然后声明参数输入,输出。例如:

/**
* Add method
*
* @param Int $param1
* @param Int $param2
* @return Int
*/
相关问题