我正在访问一个远程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,如上所示。什么都没有帮助。任何建议都会受到高度赞赏。
答案 0 :(得分:0)
在SAP中访问Web服务时遇到同样的问题,它不是PHP Bug,而是SAP Web Dispatcher中的超时设置。
我正在努力解决这个问题,试图弄清楚PHP或SOAP模块出了什么问题。
最后,我在SOAP-UI中进行了测试,问题很快就得到了解决。您应该使用SOAP-UI执行相同的操作。也许您正在调用的Web服务依赖于另一个具有自己的超时设置的远程连接。