Я пишу приложение SOAP в Symfony, и для всего моего запроса у меня появляется ошибка. Procedure 'getClusterName' not present
.
Странно то, что когда я создаю тестовое SOAP-приложение в чистом PHP, он отлично работает, но тот же код в Symfony возвращает ошибку.
Еще одна странная вещь: когда в коде сервера SOAP я перечисляю доступные служебные функции с помощью $server->getFunctions()
, он возвращает массив сервисных функций, а getClusterName
– в этом массиве. Таким образом, функция известна серверу, но она не может ее вызывать.
При написании службы в Symfony я следил за этой статьей и вот мой код:
Клиент :
namespace Prj\SoapBundle\Controller; class SoapController extends Controller { public function indexAction() { $client = new \SoapClient('http://localhost/test.wsdl'); $client->getClusterName();
Сервер :
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();
Сервис :
namespace Prj\SoapBundle; class HelloService { public function getClusterName() { return '<?xml version="1.0" encoding="utf-8"?><root>Hello!</root>'; } }
* .wsdl-файл кажется правильным, потому что он связывает вызов с контроллером и отлично работает с ванильным сервисом PHP.
В Интернете эта ошибка обычно объясняется кэшированным wsdl, но это обрабатывается здесь в коде сервера, устанавливая параметр soap.wsdl_cache_enabled
равным нулю.
Даже если параметр soap.wsdl_cache_enabled = 0
, попробуйте также soap.wsdl_cache_enabled = 0
папку /tmp
.
Для меня работала очистка папки tmp файлов wfd-prefixed. Я также изменил параметр wsdl_cache_enabled PHP на 0, как это было предложено в моей среде dev.