微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – PHP:SoapClient构造函数很慢(需要3分钟)

我是PHP的新手.经过大量的搜索后,我设法以某种方式使用由Java和PHP创建的Web服务,但问题是SoapClient类的构造函数非常慢.这是我的PHP代码

<?
require_once('SOAP/Client.PHP'); 
$url = "http://127.0.0.1:8024/_RS?wsdl";
$sc = new SoapClient($url);
?>

这有时需要3分钟.我不知道问题是什么.在创建构造函数之后,我可以在1秒内在for循环中使用它50次,所以我很确定构造函数是减慢我的代码的部分.

您认为导致问题的是什么?

先感谢您.

PS:
更多信息在我的另一个问题:
https://stackoverflow.com/questions/5929669/call-a-wsdl-web-service-created-by-java-from-nushphere-phped

PPS:
正如AJ所建议的,我使用XDebug和kcachegrind来分析问题.如你所见,我是对的.这是图片

解决方法:

我也有同样的问题. PHP SoapClient非常快,在Tomcat上部署了相同的Web服务.我尝试做一个“wget”来查看响应中的标题是否不同,因为问题是WSDL缓存我找到的差异可能是原因:

使用Tomcat:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Content-Length: 23925
Date: Thu, 08 Mar 2012 23:13:10 GMT
Connection: keep-alive

使用Endpoint.publish(…)

HTTP/1.1 200 OK
Content-type: text/xml;charset=utf-8
Content-length: 23837

现在我只需要找出如何强制Endpoint.publish(…)插入Server,Date或Connection-header.

(编辑)我找到了一个解决方案:问题不仅在于Chunked数据,还在于“Keep-Alive”.这可以通过在stream_context中设置标题“Connection:Close”来防止.请看下面:

class ImprovedSoapClient extends SoapClient
{
    public function __construct($wsdlLocation)
    {
        parent::__construct(
            $wsdlLocation 
            , array(
                , 'cache_wsdl' => WSDL_CACHE_NONE
                , 'stream_context'=>stream_context_create(
                    array('http'=>
                        array(
                            'protocol_version'=>'1.0'
                            , 'header' => 'Connection: Close'
                        )
                    )
                )
            )
        );
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐