SoapClient-超时-无法加载外部实体(但适用于localhost)

时间:2018-07-16 09:30:00

标签: php server timeout soap-client

我遇到了这样的问题:我的集成脚本(执行SoapClient请求)可以在我的本地dev-machine上运行,但是返回

  

“无法加载外部实体”

超时后,在我们的产品服务器上

。 (通过浏览器也可以使用)

简化代码..

        $contextOptions = array(
            'ssl' => array(
                'verify_peer'       => false,
                'verify_peer_name'  => false,
                'allow_self_signed' => true,
                'ciphers'           => 'RC4-SHA',
        ));

        $sslContext = stream_context_create($contextOptions);

        // initiate the SoapClient
        $options = [
            // 'soap_version'       => self::SOAP_VERSION,
            // 'connection_timeout' => self::SOAP_CONNECTION_TIMEOUT,
            'login'              => $this -> getTenant() . '\\' . $this -> getUsername(),
            'password'           => $this -> getPassword(),
            // 'features'           => SOAP_SINGLE_ELEMENT_ARRAYS,
            // 'encoding'           => 'UTF-8',
            'verifypeer'         => false,
            'verifyhost'         => false,
            // 'soap_version'       => SOAP_1_2,
            'trace'              => 1,
            'exceptions'         => 1,
            'connection_timeout' => 60,
            'cache_wsdl'         => WSDL_CACHE_NONE,
            'stream_context'     => $sslContext
        ];

        $this -> soapClient = new \SoapClient($this -> buildWsdlUrl(), $options);

实际请求

$result = $this -> soapClient -> ImportGenJournalLines($ImportGenJournalLines -> getRequest());

两台计算机上的配置。

>     Soap Client   enabled
>     Soap Server   enabled
> 
>     soap.wsdl_cache           1   1
>     soap.wsdl_cache_dir       /tmp    /tmp
>     soap.wsdl_cache_enabled   1   1
>     soap.wsdl_cache_limit 5   5
>     soap.wsdl_cache_ttl   86400   86400
> 
>     Registered PHP Streams    php, file, glob, data, http, ftp, zip, compress.zlib, compress.bzip2, https, ftps, phar

服务器之间的唯一区别是,本地主机运行在Apache 2.0处理程序上,而生产服务器运行在FPM / FastCGI上作为服务器API。

我尝试使用不同的PHP版本(以防万一有些不同),例如5.6、7.1和7.2。本地主机可以在所有版本上完美运行,但是prod服务器会抛出超时。

远程Web服务是Microsoft Dynamics服务器。

(用于其他集成的)基本SOAP调用正常工作。

起初,我认为这是由于缓存造成的,但是后来我添加了一个缓存破坏器并更改了php配置,但没有结果。

接下来我应该检查什么配置?我们的服务器通常是“开放的”(无限制,软件包是最新的,仅用于Web脚本),但是显然我缺少导致此问题的关键元素。

==更新==

我也尝试通过上下文选项发送以下内容,但没有成功:

'http' => array(
     'user_agent' => 'PHPSoapClient'
)

通过以下网址找到:SOAP-ERROR: Parsing WSDL: Couldn't load from - but works on WAMP

==在底部回答了我自己的问题==

1 个答案:

答案 0 :(得分:0)

发现了问题。这种情况的原因很明显。也许如果我将URL张贴在这里,你们会指出来的(对我来说很愚蠢)。

显然,我们的服务器通过我们的提供商提供了一个顶层共享防火墙,并且该端口(远程Web服务在其上运行的端口8002)被阻止用于传出连接。

我已经联系了我们的提供商,他们开放了该端口,并且现在一切正常。