zf 1.9.6 Zend_Soap: Fonction ( « doString ») n'est pas une méthode valide pour ce service

StackOverflow https://stackoverflow.com/questions/1907358

Question

cette question

Je suis en train de travailler avec Zend_Soap en utilisant zend framework php 1.9.6 et 5.3.1.

soap.php (générateur WSDL)

<?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 (web classe de service)

<?php
class Soaping {

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

}

client.php - client

<?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');

quand j'exécuter le fichier client.php je reçois l'erreur: 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

xml qui est créé en suivant le lien http: //server/soap/soap.php wsdl

<?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>

Je vois que la fonction existe dans le fichier XML, pourquoi ne puis-je utiliser?

mise à jour

si j'ajoute la fonction suivante à la classe:
          / **
           * Ajouter une méthode
           *
           * @Param Int $ param1
           * @Param Int $ param2
           * @Return Int
           * /
         fonction publique math_add ($ param1, $ param2) {
             return $ param1 + $ param2;
         }
cette fonction se reconnaît. mais même si je change à add_math2 (), la fonction ne soit pas reconnu à nouveau.

Était-ce utile?

La solution

ok, il semble que php mises en cache la première fois que je crée un fichier wsdl et ne pas recréer.

cache de savon peut être désactivé par la directive php soap.wsdl_cache_enabled = 0

Autres conseils

Vous devez ajouter un commentaire pour la fonction seulement, puis déclarer la saisie des paramètres, la sortie. Exemple:

/**
* Add method
*
* @param Int $param1
* @param Int $param2
* @return Int
*/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top