Процедура PHP SOAP 'имя_функции' отсутствует
Я пишу SOAP-приложение в Symfony и по всем моим запросам получаю ошибкуProcedure 'getClusterName' not present
.
Странно то, что когда я создаю тестовое SOAP-приложение на чистом PHP, оно работает нормально, но тот же код в Symfony возвращает ошибку.
Другая странная вещь заключается в том, что, когда в коде сервера SOAP я перечисляю доступные$server->getFunctions()
, он возвращает массив сервисных функций иgetClusterName
находится в этом массиве. Таким образом, функция известна серверу, но она не может вызывать ее.
При написании сервиса в Symfony я следовалЭта статья и вот мой код:
Client:
namespace Prj\SoapBundle\Controller;
class SoapController extends Controller
{
public function indexAction()
{
$client = new \SoapClient('http://localhost/test.wsdl');
$client->getClusterName();
Server:
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();
Service:
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
параметр в ноль.