我在Zend(v1)XmlRpc客户端出现此错误:
未捕获的异常'Zend_XmlRpc_Client_FaultException',消息'无法解析响应'。
这是错误状态651。
调用永远不会达到所请求的类/方法,似乎调用没有像被阻止的那样被触发。我正在对调用的方法进行调试,但它没有被触发。
PHP版本为5.4。
修改
以下是代码:
来电者课程:
require_once 'library/Zend/XmlRpc/Client.php';
class FrontService
{
private $client;
public function __construct($xmlRpc)
{
$this->client = new Zend_XmlRpc_Client($xmlRpc);
}
public function call($name, $params = array())
{
return $this->client->call($name, $params);
}
}
致电课程:
$this->_fs = new FrontService(HM_Config::getParam("amf-url"));
$editos = $this->_fs->call('getEdito',$params_home);
代码叫:
include_once realpath(dirname(__FILE__) .'/..')
.'/application/bootstrap.php';
require_once '_config.php';
require_once 'DirectDbConnectionV2.php';
class FrontGateway extends DirectDbConnectionV2
{
public static $smStatic;
function __construct()
{
mysql_query("SET NAMES 'utf8'");
$this->sm = self::$smStatic;
$this->log = new Log();
$this->log->set_file('amfDbConnection');
$this->log->write('construct bordel');
}
}
FrontGateway::$smStatic = $sm;
$controllerManager = $sm->get('EditoWebsiteMVC\ControllerManager');
$controllerManager->run('EditoWebsite\Controller\UIGateway', 'xmlRpc');
应该执行的代码:
namespace EditoWebsite\Controller;
use EditoWebsiteMVC\AbstractController;
use EditoWebsiteMVC\ViewRender\CLI as CLIViewRender;
use EditoWebsiteMVC\ViewRender\HTMLTemplate as HTMLTemplateViewRender;
use Zend_XmlRpc_Server as XmlRpcServer;
class UIGatewayController extends AbstractController
{
public function xmlRpcAction()
{
$svr = new XmlRpcServer();
$svr->setClass('FrontGateway');
echo $svr->handle();
exit;
}
}
永远不会到达 DirectDbConnectionV2 的 getEdito 方法中的代码。
我需要在服务器上启用某些功能吗?或者我需要打开的端口?
编辑编辑
我应该提一下,代码正在处理我可以访问的另一台服务器,有什么我应该比较/检查以解决这个问题吗?
非常感谢
答案 0 :(得分:0)
我认为甚至没有足够的信息来猜测,但让我试试。
我遇到了类似的问题,发送的请求从未到达服务器。事实证明,Zend_Http_Client_Adapter_Socket
适配器绑定到IPv6,并且由于路由问题请求从未到达服务器。
最后,解决这个问题的是:
$client->getAdapter()->setStreamContext(array(
'socket' => array('bindto' => '0:0'),
));
其中$client
是Zend_Http_Client
的实例。
同样,它只是在黑暗中拍摄,但值得尝试。 :)
修改强>
在您的情况下,您应该向FrontService
构造函数添加以下内容:
$this->client->getHttpClient()->getAdapter()->setStreamContext(array(
'socket' => array('bindto' => '0:0'),
));
修改编辑:
回到1.9.0,Zend_Http_Client上没有getAdapter
,你必须自己创建适配器并将其传递给http客户端:
public function __construct($xmlRpc)
{
$this->client = new Zend_XmlRpc_Client($xmlRpc);
$adapter = Zend_Http_Client_Adapter_Socket();
$adapter->setStreamContext(array(
'socket' => array('bindto' => '0:0'),
));
$this->client->getHttpClient()->setAdapter($adapter);
}
干杯。