首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zend xmlrpc错误

Zend xmlrpc错误
EN

Stack Overflow用户
提问于 2018-03-30 17:23:06
回答 1查看 285关注 0票数 1

Zend (v1) XmlRpc客户机出现了以下错误:

带有消息“未能解析响应”的异常“Zend_XmlRpc_Client_FaultException”。

这是错误状态651。

调用永远不会到达所请求的类/方法,似乎调用不会像被阻塞或什么的那样被触发。我正在调试调用的方法,它没有被触发。

PHP版本为5.4。

编辑

以下是代码:

呼叫者类别:

代码语言:javascript
复制
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);
    }
}

呼叫全班:

代码语言:javascript
复制
$this->_fs = new FrontService(HM_Config::getParam("amf-url"));
$editos = $this->_fs->call('getEdito',$params_home);

代号为:

代码语言:javascript
复制
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');

应执行的代码:

代码语言:javascript
复制
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;
    }
}

getEdito方法中来自DirectDbConnectionV2的代码从未达到。

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

编辑编辑

我应该指出,代码正在另一个我可以访问的服务器上工作,有什么我应该比较/检查的东西可以解决这个问题吗?

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2018-03-30 17:36:31

我不认为有足够的信息,甚至可以作出猜测,但让我试试。

我也遇到过类似的问题,在那里发送的请求从未到达服务器。结果是,Zend_Http_Client_Adapter_Socket适配器绑定到IPv6,并且由于路由问题,请求从未到达服务器。

最后,解决问题的是:

代码语言:javascript
复制
$client->getAdapter()->setStreamContext(array(
    'socket' => array('bindto' => '0:0'),
));

其中$clientZend_Http_Client的一个实例。

再说一次,这只是一次黑暗中的尝试,但可能值得一试。:)

编辑:

在您的示例中,您应该向FrontService构造函数添加以下内容:

代码语言:javascript
复制
$this->client->getHttpClient()->getAdapter()->setStreamContext(array(
    'socket' => array('bindto' => '0:0'),
));

编辑编辑:

因为回到1.9.0,Zend_Http_Client上没有Zend_Http_Client,所以您必须自己创建适配器并将其传递给http客户端:

代码语言:javascript
复制
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);
}

干杯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49578667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档