我正在尝试从我正在运行该服务的同一服务器上调用Soap Client进行测试。我的WSDL位于:http://www.installittoday.com/api/server.php?wsdl我正在尝试使用以下内容加载它:
$client = new SoapClient('http://www.installittoday.com/api/server.php?wsdl');
但我收回了错误:
Warning: SoapClient::SoapClient(http://www.installittoday.com/api/server.php?wsdl) [soapclient.soapclient]: failed to open stream: Connection timed out in /home/installi/public_html/api/client.php on line 4
Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php on line 4
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.installittoday.com/api/server.php?wsdl' : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php:4 Stack trace: #0 /home/installi/public_html/api/client.php(4): SoapClient->SoapClient('http://www.inst...') #1 {main} thrown in /home/installi/public_html/api/client.php on line 4
然而,我可以从我的另一个网站建立客户端。这是防火墙问题还是什么?
答案 0 :(得分:3)
确保在 php.ini
中启用了这些扩展程序extension=php_curl.dll
extension=php_openssl.dll
extension=php_soap.dll
答案 1 :(得分:2)
从这里加载也很好。
尝试使用Web浏览器从您希望客户端访问的站点连接到它,或者如果没有设置代理的远程计算机使用curl:
curl http://www.installittoday.com/api/server.php?wsdl
这将告诉您是否可以通过机器连接到该站点。
如果你的机器连接速度有限/拥挤,你也可以尝试多个连接,或增加default_socket_timeout。
您尝试连接哪些端口?
答案 2 :(得分:1)
对于遇到此错误的任何人。尝试从php.ini或SOAP调用中的参数禁用WSDL缓存。
问题是,PHP默认将WSDL文件缓存在临时文件夹中。首次缓存文件后,PHP继续使用此文件。它仅在24小时后刷新(缓存的默认ttl)。
因此,如果您更改了WSDL文件,PHP将拾取旧文件,导致出现类似OP的错误。 Matt,你的问题是通过引用一个永远不会被缓存的文件来解决的。
默认情况下它被缓存的原因是因为你的服务器必须请求文件然后解析它,这需要一些提取和处理。
你有两个选择,要么修改你的php.ini中的相关变量,要么发送一个param和你的SOAP调用。
例如:
$client = new SoapClient($webservice, array('classmap' => $soap_class_map, 'cache_wsdl' => WSDL_CACHE_NONE));
希望这有帮助。
答案 3 :(得分:0)
OP再来一次。
更多背景信息:我在installittoday.com上主持这项服务(显然)。我也试图从同一个地方运行一个客户端,仅用于测试目的。我可以从我尝试完全正常的每个其他网站连接到该服务,并且我已经成功地在installittoday上托管了客户端的一些WSDL。由于某种原因,该网站似乎无法连接到自身。
我真诚地怀疑这是一个拥挤的线路问题。
现在我已经实现了这一点,我意识到这个问题可能会扩展到SOAP以外的某种Apache配置问题,除非有一个我缺少的端口事情。我没有设置任何不同的端口,有没有我应该确保我已经开放SOAP?
答案 4 :(得分:0)
我通过将动态生成的nusoap WSDL保存为独立文件来解决这个问题,并且所有似乎都正常工作。我不知道为什么会这样。
无论如何我打算将它移到PHP5,我只是使用nuSoap来生成WSDL。