Estoy escribiendo una aplicación SOAP en Symfony y, a pesar de mi solicitud, recibo un error Procedure 'getClusterName' not present
.PHP SOAP El procedimiento 'functionName' no está presente
Lo extraño es que cuando creo una aplicación SOAP de prueba en PHP puro, funciona bien, pero el mismo código en Symfony devuelve un error.
Otra cosa extraña es que cuando en el código del servidor SOAP enumero las funciones de servicio disponibles con $server->getFunctions()
, devuelve una matriz de las funciones de servicio y getClusterName
está en esa matriz. Entonces, el servidor conoce la función, pero no puede llamarla.
Al escribir el servicio en Symfony Seguí this article y aquí está mi código:
cliente:
namespace Prj\SoapBundle\Controller;
class SoapController extends Controller
{
public function indexAction()
{
$client = new \SoapClient('http://localhost/test.wsdl');
$client->getClusterName();
servidor:
namespace Prj\SoapBundle\Controller;
class SoapController extends Controller
{
public function indexAction()
{
ini_set("soap.wsdl_cache_enabled", "0");
$server = new \SoapServer($this->container->getParameter('wsdl'));
$server->setClass('SoapBundle\HelloService');
$server->handle();
Servicio:
namespace Prj\SoapBundle;
class HelloService
{
public function getClusterName()
{
return '<?xml version="1.0" encoding="utf-8"?><root>Hello!</root>';
}
}
* .wsdl el archivo parece ser correcto porque enlaza la llamada con el controlador y funciona bien con el servicio vainilla de PHP.
En Internet, este error generalmente se explica por wsdl almacenado en caché, pero esto se maneja aquí en el código del servidor estableciendo el parámetro soap.wsdl_cache_enabled
en cero.