我的 SOAP 解决方案出现问题。有时我会收到一条错误消息:
Function (functionA) is not a valid method for this service
8 个月后编辑 虽然我找不到问题的原因,但我能够解决它。每当我收到来自 API 的响应时,我都会检查 SoapFault 并发送另一个相同的请求并使用第二次返回的答案。(作为答案发布)
这发生在来自 PHP 的调用中,例如:
functionA() - expected response
functionA() - expected response
functionA() - SoapFault
functionA() - expected response
在上述所有调用中都将得到相同的结果,并且使用相同的参数(如果有的话)。因为它几乎适用于所有调用,所以我知道该函数和相应的 WSDL 就在那里。
我认为问题在于缓存没有该功能的旧版本。我尝试使用以下方法禁用缓存:
ini_set("soap.wsdl_cache_enabled", "0");
并在每次调用时添加一个随机虚拟参数,并在我使用 Zend_SoapClient 时禁用它。
'cache_wsdl' = false
我希望有人可以指出我的任何方向或对可能的原因有任何直接的建议。
我的代码如下所示:
public function __construct()
{
$wsdl = "http://catlovers.nl/index.php?wsdl&dummy=".rand(1000,9999);
$this->_client = new Zend_Soap_Client($wsdl, array(
'soapVersion' => SOAP_1_1,
'cache_wsdl' => false
));
$this->_client->setWsdlCache(false);
}
function __call($name, $arguments) // Calls are made this way
{
array_unshift($arguments, $this->_apiKey, $this->_user, $this->_password);
return call_user_func_array(array($this->_client, $name), $arguments);
}
public function getCat()
{
return ($this->__call('getCat',array()));
}
在“另一边”我有:
$server = new nusoap_server();
$server->wsdl->addComplexType('Cat', ....
$server->register( 'getCat', return Cat ...
function getCat($apikey, $email, $password)
{
$cat = $db->get("redCat");
return $cat;
}