2013-04-30 2 views
4

У меня возникли серьезные проблемы для решения этой проблемы. Я получил APP с тремя модулями, которые предоставили SOAP различные сервисы. Что происходит, что 2 из них получают такой ответ:ZF2 SOAP «Процедура нет» Ошибка

SoapFault

Файл: /var/www/empreendimentos/vendor/zendframework/zendframework/library/Zend/Soap/Client.php:10

Сообщение: Процедура нет

я уже проверил, а имена функций прав и я использую метод getFunctions. Это возвращение из getFunctions():

array 
    0 => string 'Array getCliAll(anyType $filter)' (length=32) 
    1 => string 'Array insertCli(anyType $data)' (length=30) 
    2 => string 'Array editCli(anyType $data, anyType $id)' (length=41) 
    3 => string 'void setServiceLocator(anyType $serviceLocator)' (length=47) 
    4 => string 'void getServiceLocator()' (length=24) 

Мои методы рукояток выглядеть следующим образом:

public function handleWSDL() { 
$autodiscover = new AutoDiscover(); 
$autodiscover->setClass('\Cli\Service\CliService'); 

$autodiscover->setUri($this->_URI); 
$wsdl = $autodiscover->generate(); 
$wsdl = $wsdl->toDomDocument(); 

// geramos o XML dando um echo no $wsdl->saveXML() 
echo $wsdl->saveXML(); 
} 

public function handleSOAP() { 
$soap = new \Zend\Soap\Server($this->_WSDL_URI); 
$soap->setWSDLCache(false); 
$classHandle = new CliService(); 
$classHandle->setServiceLocator($this->getServiceLocator()); 
$soap->setClass($classHandle); 
$soap->handle(); 
} 

Я не получаю ошибки на стороне сервера. Только этот ответ для всех методов. Что не так?

UPDATE:

Оказывается, это "проблема" в конфигурации ZF2. перегрузки. У меня был modile.config.php, чтобы хранить информацию WSDL и URI, но использовал тот же ярлык для конфигурации в файле. Перегрузка делала каждый WSDL и URI одинаковым и давала мне проблему.

Как это:

EMP модуль modile.config.php

'service_url' => array(
    "wsdl" => 'http://localhost/empreendimentos/public/emp/service?wsdl', 
    "return" => 'http://localhost/empreendimentos/public/emp/service', 
), 

EMP Module modile.config.php

'service_url' => array(
"wsdl" => 'http://localhost/empreendimentos/public/cli/service?wsdl', 
"return" => 'http://localhost/empreendimentos/public/cli/service', 
), 

Каждый знает, почему это так? это значит, что нужно смешивать конфигурации модулей?

ответ

1

Если бы эта проблема вчера была найдена, то ответ был найден на сервере wsdl call.

Сервер вызывает свой собственный wsdl для анализа доступных методов. Если ваш URL-адрес wsdl неверен, он видит, какие методы доступны на другом сервере, и говорит «Процедура не присутствует».

В моем случае AdmintoolsController имел линию

$wsdl_url = 'http://' . $_SERVER['HTTP_HOST'] . '/news/?wsdl'; 

так смотрел на службу новостей для метода.

Изменить его

$wsdl_url = 'http://' . $_SERVER['HTTP_HOST'] . '/admintools/?wsdl'; 

и она отлично работает.

Я искал Google в течение нескольких часов, чтобы найти это исправление, и мой коллега посмотрел на код и сразу заметил его.

Надеется, что это помогает

Джона

+0

Просто, что случилось со мной брош! большое спасибо! теперь он отлично работает! –

0

Также попробуйте сделать следующие изменения, а затем проверить, работает ли он:

  1. Удалите файлы, начинающимся с «wsdl-» в tmp папки вашего zend-сервера.
  2. Сделайте настройку php: phpSettings.soap.wsdl_cache_enabled = 0 в вашем файле application.ini.
Смежные вопросы