繁体   English   中英

SOAP客户端错误:“获取Http标头时出错”

[英]SOAP Client Error: “Error Fetching Http Headers”

我试图在我的计算机上使用SOAP客户端服务器,但它似乎无法正常工作,当我尝试运行SOAP客户端时,出现此错误Error Fetching Http Headers。

我一直在寻找,我遇到的解决方案是将default_socket_timeout从60秒增加到120秒,这对我不起作用,我还看到了另一种解决方案,即将虚拟机放入我的Apache KeepAlive Off中,但没有这样做。工作。

WSDL可以正常工作,因为我尝试在另一台计算机上使用它并且可以正常工作。

我正在使用Zend Framework在Linux Mint中运行PHP版本5.3.5-1ubuntu7.4,希望大家能帮助我解决此问题。

很抱歉,但我不知道您要使用什么来设置SOAP服务.....

如果您可以提供有关SOAP服务的更多信息(给定Zend Framework标签,可以使用Zend_Soap)等等,那将会很棒。

另外,作为一种快速的替代方法,您说您已经在另一台计算机上查看了WSDL,也许在替代环境中尝试了该应用程序以确保它不是环境问题。

您的客户端-服务器代码可能是一个简单的问题。

更新:好的,所以我意识到我昨天提到的示例尚未完全实现,因此我很快就将某些内容结合在一起,以便您尝试查看它是否在您的环境中有效。

代码是我在这里找到的东西(Zend_Soap_Server的一个示例)在这里另一个SO问题(一个基本的SOAP服务测试的一个示例)混合而成的

我在最后使用ZF 1.11对其进行了测试,并且我概述的示例使用了新ZF项目获得的默认应用程序路径(例如,模型位于目录application / models中,因此显示的模型以Application_Model_Classname为标题)。

如果有效,您可以进行相应的调整。...如果无效,我们可以尝试其他方法。 首先创建一个新的SOAP控制器并按如下所示设置类:

<?php
class SoapController extends Zend_Controller_Action
{

    public function init()
    {
        ini_set("soap.wsdl_cache_enabled", "0");     //disable WSDL caching
        $this->_helper->layout()->disableLayout();   //disable the layout
        $this->_helper->viewRenderer->setNoRender(); //disable the view
    }

    public function indexAction ()
    {
        if (isset($_GET['wsdl'])) {
            //return the WSDL
            $this->handleWSDL();
        } else {
            //handle SOAP request
            $this->handleSOAP();
        }
    }

    private function handleWSDL ()
    {
        $strategy = new Zend_Soap_Wsdl_Strategy_AnyType();
        $autodiscover = new Zend_Soap_AutoDiscover();
        $autodiscover->setComplexTypeStrategy($strategy);
        $autodiscover->setClass('Application_Model_SoapService');
        $autodiscover->handle();
    }

    private function handleSOAP ()
    {
        $server = new Zend_Soap_Server(null, 
        array('uri' => "http://YOURDOMAIN/soap?wsdl"));
        $server->setClass("Application_Model_SoapService");
        $server->handle();
    }

    public function testAction()
    {
        $client = new Zend_Soap_Client("http://YOURDOMAIN/soap?wsdl");
        try {
            echo $client->testMethod('test'); 
        } catch (Exception $e) {
            echo $e;
        }
    }

}

在上面的类中,将使用Zend_Soap_Autodiscover自动将WSDL生成,并以application / models / SoapService.php中的SoapService.php文件作为模板。 请注意,目标类中每个方法上方的DocBock注释对于此过程都是必不可少的。

接下来,在默认模型文件夹中创建SoapService.php文件:

<?php
class Application_Model_SoapService
{
    /**
    * testMethod
    *  
    * @param string $string 
    * @return string $testSuccess
    */    
    public function testMethod(string $string)
    {
        $testSuccess = 'Test successful, the message was: ' . $string;          
        return $testSuccess;
    }       

}

如果一切正常,您可以访问:

http://YOURDOMAIN/soap?wsdl

查看WSDL并访问:

http://YOURDOMAIN/soap/test

以获取成功消息,其中包含您在SoapController类的testAction()代码内的客户端请求中指定的字符串,作为消息的一部分。

让我知道它是否有效,我们可以从那里继续。

星期一我可以再看一遍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM