ZF2 SOAP“过程中不存在”错误(ZF2 SOAP “Procedure not present

2019-09-01 13:11发布

我有严重的问题,解决这个问题。 我得到了一个APP有3个模块,进行了不同的服务,通过SOAP来提供。 什么情况是,其中2收到此回应:

的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();
}

我得到在服务器端没有错误。 只有这个反应的所有方法。 怎么了?

更新:

原来这是一个在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模块modile.config.php

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

任何人都知道这是为什么这样呢? 被它suposed混合模块CONFIGS?

Answer 1:

昨天有这个问题,发现答案是在服务器WSDL调用。

服务器调用自己的WSDL来反思可用的方法。 如果您的WSDL URL是错误的,它看到什么方法在另一台服务器可用,并且说“程序不存在”。

在我的情况下AdmintoolsController有行

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

所以它一直在寻找的新闻服务的方法。

将其更改为

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

并能正常工作。

我搜索谷歌为寻找此修复程序小时,和我的同事看了一下代码,并发现它立竿见影。

希望这可以帮助

约翰



Answer 2:

也试着做下面的更改,然后检查是否正常工作:

  1. 删除开始在你的Zend服务器的tmp文件夹“WSDL到 ”的文件。
  2. 一段PHP设置: phpSettings.soap.wsdl_cache_enabled = 0在你的application.ini文件。


文章来源: ZF2 SOAP “Procedure not present” Error