PHP中隐藏的SOAP Bug(?):Timeout生成内部错误(500)

时间:2011-10-10 16:39:56

标签: php soap timeout

我正在访问一个远程SOAP服务,该服务往往反应非常缓慢(我们在这里谈论的时间超过10秒)。 系统是PHP版本5.3.1,在Windows Server 2003上运行。

我的客户端设置如下:

new SoapClient($wsdl, array("trace" => true, "exceptions" => true, "cache_wsdl" => WSDL_CACHE_BOTH, "connection_timeout"=>5000));

现在,当我拍摄的请求超过10秒时,会发生以下情况:我从服务中获得了较晚但正确的响应,以及200个标头(取自SoapClient :: __ getLastResponse)

Response Headers:
HTTP/1.1 200 OK Via: 1.1 XXX Connection: Keep-Alive Proxy-Connection: Keep-Alive Content-Length: 430 Date: Mon, 10 Oct 2011 16:03:15 GMT Content-Type: text/xml;charset=UTF-8 Server: Microsoft-IIS/7.5 X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 X-Powered-By: ASP.NET

但是作为SOAP结果,我得到了一个SoapFault:

fault:
  code: 500
  message: An internal error occurred. Please contact our support.

我试过用以下方法阻止这个:

ini_set('default_socket_timeout', 5000 );

并使用“connection_timeout”=> 5000设置SoapClient,如上所示。什么都没有帮助。任何建议都会受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

在SAP中访问Web服务时遇到同样的问题,它不是PHP Bug,而是SAP Web Dispatcher中的超时设置。

我正在努力解决这个问题,试图弄清楚PHP或SOAP模块出了什么问题。

最后,我在SOAP-UI中进行了测试,问题很快就得到了解决。您应该使用SOAP-UI执行相同的操作。也许您正在调用的Web服务依赖于另一个具有自己的超时设置的远程连接。