【问题标题】:Zend xmlrpc errorZend xmlrpc 错误
【发布时间】:2018-03-30 17:23:06
【问题描述】:

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 方法中的代码永远无法到达。

我需要在服务器上启用什么吗?还是我需要打开的端口?

编辑编辑

我应该提到代码正在我可以访问的另一台服务器上运行,有什么我应该比较/检查以解决这个问题吗?

非常感谢

【问题讨论】:

    标签: php zend-framework xml-rpc


    【解决方案1】:

    我认为没有足够的信息来猜测,但让我试试。

    我遇到过类似的问题,发送的请求从未到达服务器。事实证明,Zend_Http_Client_Adapter_Socket 适配器绑定到 IPv6,并且由于路由问题,请求从未到达服务器。

    最终解决问题的是:

    $client->getAdapter()->setStreamContext(array(
        'socket' => array('bindto' => '0:0'),
    ));
    

    其中$clientZend_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);
    }
    

    干杯。

    【讨论】:

    • 我已经编辑了我的问题以使其更完整,你能告诉我在哪里添加该代码吗?我试过但没有发现。
    • 编辑了我的答案。 :)
    • 得到那个错误致命错误:调用未定义的方法 Zend_Http_Client::getAdapter() 但我有一个库/Zend/Http/Client/Adapter/Socket.php,它有一个 setStream 上下文方法。跨度>
    • 你能检查一下你的library/Zend/Http/Client.php 是否有getAdapter 方法吗?它应该在第 950 行附近。
    • 不,它不存在 :-/.
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多